java中的位运算符用来对二进制位进行操作,包括右移(>>)、左移(<<)、无符号右移(>>>)、按位取反(~)、按位与(&)、按位或(|)、异或(^)等,这些运算符只能对整型和字符型数据进行操作。
对于整型数据(计算机中正数通过原码表示,负数是用反码表示)
1、右移:若为正数高位补零,若为负数高位补一
(1)128>>1 得到 64
0000 0000 0000 0000 0000 0000 1000 0000 128
=> 0000 0000 0000 0000 0000 0000 0100 0000 64
(2)-256>>4 得到 -16
(原码)1000 0000 0000 0000 0000 0001 0000 0000 -256
(补码)1111 1111 1111 1111 1111 1111 0000 0000 (计算机中的表示形式)
=> (补码)1111 1111 1111 1111 1111 1111 1111 0000
(原码)1000 0000 0000 0000 0000 0000 0001 0000 -16
2、左移:低位补零
5<<2 得到 20
0000 0000 0000 0000 0000 0000 0000 0101 5
=> 0000 0000 0000 0000 0000 0000 0001 0100 20
3、无符号右移(逻辑右移):高位补零
-5>>>1 得到 2147483645
(原码)1000 0000 0000 0000 0000 0000 0000 0101 -5
(补码)1111 1111 1111 1111 1111 1111 1111 1011
=> (补码)0111 1111 1111 1111 1111 1111 1111 1101
(原码)0111 1111 1111 1111 1111 1111 1111 1101 2147483645
4、按位取反:一元运算符
5、按位与:对两个整型操作数中对应位执行布尔代数,两个位都为1时输出1,否则0。
6、按位或:对两个整型操作数中对应位执行布尔代数,两个位都为0时输出0,否则1
7、异或:对两个整型操作数中对应位执行布尔代数,两个位相等0,不等1