按位操作符
- 按位与 :&
- 按位或 :|
- 按位非 :~
- 按位异或 :^
按位与 :&
两个操作数中位都为1,结果才为1,否则结果为0。
如:129转换成二进制就是10000001,128转换成二进制就是10000000。根据与运算符的运算规律,只有两个位都是1,结果才是1,可以知道结果就是10000000,即128。
按位或 :|
两个位只要有一个为1,那么结果就是1,否则就为0。
如:129转换成二进制就是10000001,128转换成二进制就是10000000。根据或运算符的运算规律,只有两个位有一个是1,结果才是1,可以知道结果就是10000001,即129。
按位非 :~
它是一个一元操作符,也叫取反操作,连符号位也会取反,也就是说它只有一个参数。如果位为0,结果是1,如果位为1,结果是0。
如:128转换成二进制就是10000000。根据非运算符的运算规律,如果位为0,结果是1,如果位为1,结果是0,可以知道结果就是01111111,即127。
按位异或 :^
两个操作数的位中,相同则结果为0,不同则结果为1。
如:15转换成二进制为1111,2转换成二进制为0010,根据异或的运算规律,可以得出其结果为1101,即13。
移位操作符
- 左移操作符 :<<
- 右移操作符 :>>
- 无符号右移 :>>>
左移操作符 :<<
转为二进制后,各二进制位全部左移N位,高位丢弃,低位补0。
如为正数:2转换成二进制为0010,根据左移的运算规律,可以得出结果为:1000,即8;负数的话,会先转为补码,再进行位移运算。
如为负数:
对于-2<<2
10000000000000000000000000000010(原码)
11111111111111111111111111111101(反码)
11111111111111111111111111111110(补码)
位移2位,低位补0
1111111111111111111111111111111000
11111111111111111111111111111000(补码)
11111111111111111111111111110111(反码)
10000000000000000000000000001000(原码)
即-8
右移操作符 :>>
转为二进制后,各二进制位全部右移N位,若值为正,则在高位插入 0,若值为负,则在高位插入 1。
如为正数:2转换成二进制为0010,根据左移的运算规律,可以得出结果为:0000,即0;
如为负数:
如果为负数,对于-6>>2
10000000000000000000000000000110(原码)
11111111111111111111111111111001(反码)
11111111111111111111111111111010(补码)
位移两位,高位补1
11111111111111111111111111111110
11111111111111111111111111111110(补码)
11111111111111111111111111111101(反码)
10000000000000000000000000000010(原码)
即-2
无符号右移 :>>>
转为二进制后,各二进制位全部右移N位,无论正负,都在高位插入0。