逻辑运算符
&&:逻辑与,全真才为真。
若第一个操作数为假,肯定为假,就不判断第二个了。
||:逻辑或,有真即为真。
若第一个操作数为真 ,肯定为假,就不判断第二个了。
!:逻辑非。
用来反转操作数的逻辑状态。例true取非后为false。
位运算符:
操作数在计算机中以补码形式存在,int为4字节 (32)位。
取反:~
将二进制形式的操作数每一位都取反,即0变成1,1变成0。例
- 8(即0…000 1000),取反后真值为-9(补码为:1111…1111 0111)
与:&
全1则为1。参与运算的两个操作数,相应的二进制位进行与运算。例:
- 5&11即0101&1011,结果为1
- 1&-1即(1111&1111,结果为-1
- 1&1即(1111&0001,结果为1
或:|
有1则为1.例:
- 5|11即(0101|1011),结果为15
异或:^
相同为0,相异为1。例:
- 5^ 11即(0101^1011),结果为14
保留符号位的右移:>>
将一个操作数的各个二进制位全部右移若干位,低位被舍弃,左边空出的用符号位填充。例:
- 5>>1为2
- 10>>n 等价于10/(2^n),结果截断小数位
- -1右移多少位仍然为-1
10/(2的n次方)
不保留符号位的右移:>>>
将一个操作数的各个二进制位全部右移若干位,低位被舍弃,左边空出的用0填充。例:
- 5>>>1为2
- -9>>>1,结果为2147483643即(01111111 11111111 11111111 11111011)
保留符号位的左移:<<
将一个操作数的各个二进制位全部左移若干位,舍弃高位溢出的数,右边空出的用0填充。例:
- 5<<1为10
应用:
判断奇偶
奇数的二进制最后一位一定为1;偶数的二进制最后一位一定不为1;
0x表示16进制,0x1即0x00000000 00000000 00000000 00000001
操作数& 0x1,结果为1时为奇数。( 位运算效率高)
求余
a % 2^n = a & (2n-1)
例如:14%8=1110 & 0111 = 0110,即为6