JAVA位操作符分为两种
1.两个二进制数比较,返回一个新的二进制数
语法:
数值 运算符 数值 ,返回基本数值类型
运算符 | 内容 |
---|
&(并) | 位与位比较,都是1该位才返回1,否则该位返回0 |
|(或) | 位与位比较,只有有一个是1该位就返回1,没1该位返回0 |
^(异或) | 位与位比较,相同该位返回0,不同该位返回1 |
例子:
十进制 | 二进制(32位显示) | 结果转十进制 |
---|
20 | 00000000000000000000000000010100 | |
10 | 00000000000000000000000000001010 | |
20 & 10 | 00000000000000000000000000000000 | 0 |
20 | 10 | 00000000000000000000000000011110 | 30 |
20 ^ 10 | 00000000000000000000000000011110 | 30 |
注意:
虽然是比较,但返回的结果是数值类型,不是boolean;像 int & int 返回的是int,long & int 返回的是long
2.单个二进制数转换,返回一个新的二进制数
运算符 | 内容 |
---|
~(非) | 把每一位的0变成1,1变成0 |
<<(左移) | 把所有位整体向左移动多少位,右边补0 |
>>(右移) | 把所有位整体向右移动多少位,左边补符号位(即最高位) |
>>>(无符号右移) | 把所有位整体向右移动1位,左边补0 |
例子:
十进制 | 二进制(32位显示) | 结果转十进制 |
---|
20 | 00000000000000000000000000010100 | |
20 << 1 | 00000000000000000000000000101000 | 40 |
-20 | 11111111111111111111111111101100 | |
-20 << 1 | 11111111111111111111111111011000 | -40 |
- 右移左边补符号位(最高位),结果转为有符号的十进制整数
十进制 | 二进制(32位显示) | 结果转十进制 |
---|
20 | 00000000000000000000000000010100 | |
20 >> 1 | 00000000000000000000000000001010 | 10 |
20 >> 2 | 00000000000000000000000000000101 | 5 |
-20 | 11111111111111111111111111101100 | |
-20 >> 1 | 11111111111111111111111111110110 | -10 |
-20 >> 2 | 11111111111111111111111111111011 | -5 |
十进制 | 二进制(32位显示) | 结果转十进制 |
---|
20 | 00000000000000000000000000010100 | |
20 >>> 1 | 00000000000000000000000000001010 | 10 |
20 >>> 2 | 00000000000000000000000000000101 | 5 |
-20 | 11111111111111111111111111101100 | |
-20 >>> 1 | 01111111111111111111111111110110 | 2147483638 |
-20 >>> 2 | 00111111111111111111111111111011 | 1073741819 |
重点解释
- 符号位(最高位)
符号位即数值的最高位,即左边第一位。正数的符号位为0,负数的符号位为1。其余各位用来表示数值的大小。 - 负数的二进制
负数的二进制即将原来的二进制数的每一位0转为1,1转为0;得到的结果+1;然后前面的每一位都补1;