进制转换:
二转十:
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 |
