Java 位运算


原码

一个正数的原码,是按照绝对值大小转换成的二进制数。
一个负数的原码,是按照绝对值大小转换成的二进制数,然后最高位补1。

00000000 00000000 00000000 00000101 是5的原码。
10000000 00000000 00000000 00000101 是-5的原码。

反码

正数的反码与原码相同。
负数的反码为对该数的原码除符号位外各位取反。

00000000 00000000 00000000 00000101 是5的反码。
11111111 11111111 11111111 11111010 是-5的反码。

补码

正数的补码与原码相同。
负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1.
比如:10000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111011。

总结

正数的反码和补码都与原码相同。
负数的反码为对该数的原码除符号位外各位取反。
负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1。

与运算 &

具体规则为:两个二进制对应位都为1时,结果为1,否则结果为都0。

int a = 5; // 0000 0000 0000 0000 0000 0000 0000 0101   
int b = 3; // 0000 0000 0000 0000 0000 0000 0000 0011
a &= b;   // 0000 0000 0000 0000 0000 0000 0000 0001
System.out.println(a);

或运算 |

具体规则为:两个二进制对应位为0时该位为0,否则为1。

int a = 5; // 000 0000 0000 0000 0000 0000 0000 0101
int b = 3; // 0000 0000 0000 0000 0000 0000 0000 0011
a |= b;   // 0000 0000 0000 0000 0000 0000 0000 0111
System.out.println(a);

异或运算 ^

具体规则为:两个二进制对应位相同时,结果为0,否则结果为1。

int a = 5; // 000 0000 0000 0000 0000 0000 0000 0101
int b = 3; // 0000 0000 0000 0000 0000 0000 0000 0011
a ^= b;   // 0000 0000 0000 0000 0000 0000 0000 0110
System.out.println(a);

非运算 ~

具体规则为:操作数的第n位为1,那么结果的第n位为0,反之亦然。

int a = 5; // 000 0000 0000 0000 0000 0000 0000 0101
int b = ~a; // 1111 1111 1111 1111 1111 1111 1111 1010
System.out.println(b);

左移 <<

具体规则:左移,低位补0。

public class Test {
  public static void main(String[] args) {
    System.out.println(5<<2);
  }
}
前: 0000 0000 0000 0000 0000 0000 0000 0101
后:0000 0000 0000 0000 0000 0000 0001 0100

右移 >>

具体规则:右移,高位补0。

public class Test {
  public static void main(String[] args) {
    System.out.println(5>>2);
  }
}
前:0000 0000 0000 0000 0000 0000 0000 0101
后:0000 0000 0000 0000 0000 0000 0000 0001

无符号右移 >>>

-5换算成二进制:1111 1111 1111 1111 1111 1111 1111 1011
-5右移3位后结果为-1:1111 1111 1111 1111 1111 1111 1111 1111 // (用1进行补位)
-5无符号右移3位后的结果:0001 1111 1111 1111 1111 1111 1111 1111 // (用0进行补位)

无符号左移 <<<

正数或者负数左移(无符号左移),低位都是用0补。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM