Java中常用的位运算符
1.按位与 &
2.按位或 |
3.按位异或 ^
4.按位取反 ~
5.左移 <<
6.带符号右移 >>
7.无符号右移 >>>
位运算符的含义
位运算符都是基于二进制进行计算的,且位运算符都是针对与int类型进行操作
1.按位与 int a=1&1=1; int b=1&2=0;
2.按位或 int a=1|1=1; int b=1|2=3;
3.按位异或 异或的概念为若两个相同则返回false,两个不同则返回true,在位运算符中相同返回0,不同返回1
int a=1^1=0; int b=1^2=3;
4.按位取反 int a=~1=-2 int b=~2=-3
应为在计算机中是用补码表示数字的,所以按位取反后的数字是一个补码,因此需将补码换为原码才是这个数的值
例:1=(00000001)(按位取反)=11111110(补码)=(反码)10000001=(反码+1)=10000010(原码)=-2
补码的补码是补码的原码
5.左移 int a=1<<2=4 int b=2<<2=8
6.带符号右移 >> 表示右移,如果该数为正,则高位补0,若为负数,则高位补1。
例如:int a=8>>2=00001000>>2=00000010=2
int -8>>2=1111_1111 1111_1111 1111_1111 1111_1000(补码)>>2
=1111_1111 1111_1111 1111_1111 1111_1110(补码)
=1000_0000 0000_0000 0000_0000 0000_0010(原码)=-2
7.无符号右移 >>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0
例如:int a=8>>>2=2
int -8>>>2=1111_1111 1111_1111 1111_1111 1111_1000(补码)>>>2
=0011_1111 1111_1111 1111_1111 1111_1110(补码)
=0011_1111 1111_1111 1111_1111 1111_1110(原码)
=1073741822