位运算基础知识
- 在处理整形数值时,可以直接对组成整形数值的各个位进行操作。
- 位运算符:
&(与)
|(或)
^(异或)
~(非/取反)
>>
将二进制位右移操作<<
将二进制位左移操作>>>
用0填充高位>>
用符号填充高位,没有<<<
运算符- 对于int型,1<<35与1<<3是相同的(因为int只有32位),而左边的操作数是long型时需对右侧操作数模64
a | b | ~a | a&b | a|b |
a^b |
---|---|---|---|---|---|
1 | 1 | 0 | 1 | 1 | 0 |
0 | 1 | 1 | 0 | 1 | 1 |
0 | 0 | 1 | 0 | 0 | 0 |
java位运算的奇巧淫技
判断奇偶数
- n&1==1,则n为奇数
- n&1==0,则n为偶数
异或,相同为0,不同为1
异或可以理解为不仅位的加法
1+1=0,0+0=0,1+0=1(把加号换成异或结果是一样的)
异或的自反性
A^A^B = A^0 = A
A^A = 0
异或的交换律
- 可任意交换运算因子的位置,结果不变
异或的结合律
(a^b)^c == a^(b^c)
来几道题目练练手:
详见博客:java位运算的奇巧淫技相关算法题目详解