int a=1>>2; // 1 向右位移 2 位 int b=-1>>2;//算术右移 int c=1<<2;//算术左移 int d=-1<<2;// int e=3>>>2;//无符号右移
时间: 2024-05-23 11:16:23 浏览: 117
Java大数字运算之BigInteger <font color=red>原创</font>
在 Java 中,位运算符用于对二进制位进行操作。下面是对每个运算符的解释:
- `>>` 算术右移:将操作数的二进制表示向右移动指定的位数,移动后,符号位不变,最高位补符号位。例如,1 的二进制表示是 00000001,`1>>2` 将其向右移动 2 位,得到 00000000,即 0。
- `<<` 算术左移:将操作数的二进制表示向左移动指定的位数,移动后,最低位补 0。例如,`1<<2` 将 1 的二进制表示向左移动 2 位,得到 00000100,即 4。
- `>>>` 无符号右移:将操作数的二进制表示向右移动指定的位数,移动后,最高位补 0。例如,3 的二进制表示是 00000011,`3>>>2` 将其向右移动 2 位,得到 00000000,即 0。
- `&` 按位与:对操作数的二进制表示进行按位与运算,只有两个数对应的二进制位都为 1 时,结果才为 1。例如,3 的二进制表示是 00000011,6 的二进制表示是 00000110,`3&6` 的结果是 00000010,即 2。
- `|` 按位或:对操作数的二进制表示进行按位或运算,只要两个数对应的二进制位有一个为 1,结果就为 1。例如,3 的二进制表示是 00000011,6 的二进制表示是 00000110,`3|6` 的结果是 00000111,即 7。
- `^` 按位异或:对操作数的二进制表示进行按位异或运算,只有两个数对应的二进制位不同时,结果才为 1。例如,3 的二进制表示是 00000011,6 的二进制表示是 00000110,`3^6` 的结果是 00000101,即 5。
对于 `int b=-1>>2`,由于 `-1` 的二进制表示是全 1(补码表示),所以算术右移 2 位后,得到的结果是全 1,即 -1。对于 `int d=-1<<2`,由于左移 2 位后,最高位变为了 1,其余位都为 0,所以结果是负的。在 Java 中,负数采用补码表示,所以 -1 的补码是全 1,左移 2 位后得到的是 11111100,即 -4。
阅读全文