进制转换:
二转十:
x= int("100111",2)
# 要用字符串
十转二:
x = bin(5)
# 可以不用字符串
常用位运算:
还是查表块啊。
右移 | x >> 1 | 去掉最后一位 |
---|---|---|
左移 | x << 1 | 在最后加一个0 |
在最后加一个1 | x << 1+1 | 左移+1 |
把最后一位变成1 | x | 1 | 或 |
把最后一位变成0 | x | 1 -1 | 或 -1 |
最后一位取反 | x ^ 1 | XOR |
把右数第k位变成1 | x | (1 << (k-1)) | (101001->101101,k=3) |
把右数第k位变成0 | x & ~(1 << (k-1)) | (101101->101001,k=3) |
右数第k位取反 | x ^ (1 << (k-1)) | (101001->101101,k=3) |
取末三位 | x & 7 | (1101101->101) |
取末k位 | x & (1 << k-1) | (1101101->1101,k=5) |
取右数第k位 | (x >> (k-1)) & 1 | (1101101->1,k=4) |
把末k位变成1 | x | (1 << k-1) | (101001->101111,k=4) |
末k位取反 | x ^ (1 << k-1) | (101001->100110,k=4) |
把右边连续的1变成0 | x & (x+1) | (100101111->100100000) |
把右起第一个0变成1 | x | (x+1) | (100101111->100111111) |
把右边连续的0变成1 | x | (x-1) | (11011000->11011111) |
取右边连续的1 | (x ^ (x+1)) >> 1 | (100101111->1111) |
去掉右起第一个1的左边 | x & (x ^ (x-1)) | (100101000->1000) |
最右边的一个1变为0 | x & (x - 1) | (101100->101000) |
获取最右边的1 | x & (-x ) | (110->10) |
将正数变成负数,负数变成正数 | ~x+1 |