二进制常见操作总结
常见二进制奇技淫巧
判断奇偶数
1 | if(0 == (a & 1)) { |
判断二进制某个位是否为1
把1左移N-1位,再进行and操作,如果大于0则代表该二进制位就为1
1 | x&(1<<5) |
减去低位的最后一个1|将最右边的1变成0
1 | x = x&(x-1) |
O(1) 时间检测整数 n 是否是 2 的幂次
1 | x&(x-1) == 0 //是 |
高低位交换
给定一个 16 位的无符号整数,将其高 8 位与低 8 位进行交换,求出交换后的值
1 | a = (a >> 8) | (a << 8); |
将最右边的0变成1
1 | x|(x+1) |
在最后一位加一个1
1 | a << 1+1 |
最后一位取反
1 | x ^ 1 |
把右数第k位变成1
1 | x | (1 << (k-1)) |
把右数第k位变成0
1 | x & ~ (1 << (k-1)) |
右数第k位取反
1 | x ^ (1 << (k-1)) |
取末k位
1 | x & (1 << k-1) |
取右数第k位
1 | x >> (k-1) & 1 |
参考:
https://www.zhihu.com/question/38206659/answer/736472332
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GreenHatHGのBlog!
评论