版权声明:转载请注明出处,谢谢。 https://blog.csdn.net/butterfly5211314/article/details/85028961
为方便描述, 使用几个整数n, a, b, k.
常用的几种运算符号: &
(与), |
(或), ~
(反), ^
(异或), <<
(左移), >>
(右移), >>>
(无符号右移)
-
n左移(
<<
)k位即为 -
n右移(
>>
)k位即为 -
计算2的k次方:
2 << (k-1)
-
计算 (对2的k次方取余):
n & (m - 1)
(m= ) -
判断奇偶性
原理: 如果n为奇数, 展开最后一位为1, 否则为0if (n & 1) { // 奇数 } else { // 偶数 }
-
取指定位
比如前端常见的应用, 十六进制颜色转十进制var color = '#ccddee'; var hex = color.substr(1); hex = parseInt('0x' + hex, 16); // RRGGBB var R = (hex >> 16) & 0xff; var G = (hex >> 8) & 0xff; var B = hex & 0xff; console.log(R, G, B); // 204 221 238 console.log('#' + R.toString(16) + G.toString(16) + B.toString(16)); // #ccddee
-
使用异或交换两个整数。
a = a ^ b; b = a ^ b; a = a ^ b;
-
n & (n - 1)将整数n的最后一位为1的位变成0
- 统计n的二进制表示中1的个数
int getOnes(int n) { int count = 0; while (n) { n = n & (n - 1); ++count; } return count; }
- 判断是不是2的整数次幂(参见我的另一篇文章)
int judge(int n){ if n <= 0 { return 0; } return n & (n-1) == 0 ? 1 : 0; }
-
取相反数:
n = ~n + 1
欢迎补充指正!