关于位运算的一些简单技巧
位运算
与、或、非、异或、左移
右移:
无符号右移: >>> 高位补0
有符号右移: >>
- 逻辑右移: 高位补0
- 算术右移: 高位补符号位。
在 Java 中,明确规定了:
-
逻辑右移:>>> 补0
-
算术右移:>> 补符号位
因为可以代替除法运算,算术右移一位相当于 除以 2, 高位补符号位就还是负数,补0就是正数了。。
(也可以对对比着: 左移右移一位,在十进制中,也会相应的乘10 或 除10 运算。)
奇淫技巧
-
x & 1 == 1 , 判断偶数。。。
-
不使用第三方变量,交换2个数: 使用 异或。。。。(但注意不要在数组中这样用。。。直接改变值了。)
-
x & (x - 1) ,可以将最右边一位的1(不一定是所