1、二进制的第一位代表符号位 0代表正数 1代表复数
2、正数的原码、反码、补码都一样
3、负数的反码=符号位不变其他位取反
4、负数的补码=它的反码+1
5、计算机在运算时、是以它的补码来运算的、最后的结果以原码来显示
2、-2、-5的原码、反码、补码
2的原码: 00000000 00000000 00000000 00000010
2的反码: 00000000 00000000 00000000 00000010
2的补码: 00000000 00000000 00000000 00000010
-2的原码: 10000000 00000000 00000000 00000010
-2的反码: 11111111 11111111 11111111 11111101
-2的补码: 11111111 11111111 11111111 11111110
-5的原码: 10000000 00000000 00000000 00000101
-5的反码: 11111111 11111111 11111111 11111010
-5的补码: 11111111 11111111 11111111 11111011
位运算
&位于与、|位于或、^位于异或、~位于取反
2 & -2
2 | -2
2 ^ -2
~2
2>>1 它的补码向右移一位 用符号位补其
2<<1 它的补码左移一位 用0来补齐
2 & -2
2的原码: 00000000 00000000 00000000 00000010
2的反码: 00000000 00000000 00000000 00000010
2的补码: 00000000 00000000 00000000 00000010
-2的原码: 10000000 00000000 00000000 00000010
-2的反码: 11111111 11111111 11111111 11111101
-2的补码: 11111111 11111111 11111111 11111110
2的补码 : 00000000 00000000 00000000 00000010
2&-2的补码 : 00000000 00000000 00000000 00000010
2&-2的原码: 00000000 00000000 00000000 00000010
System.out.println(2&-2) //最后输出为2
2 | -2
2的原码: 00000000 00000000 00000000 00000010
2的反码: 00000000 00000000 00000000 00000010
2的补码: 00000000 00000000 00000000 00000010
-2的原码: 10000000 00000000 00000000 00000010
-2的反码: 11111111 11111111 11111111 11111101
-2的补码: 11111111 11111111 11111111 11111110
2的补码 : 00000000 00000000 00000000 00000010
2|-2的补码 : 11111111 11111111 11111111 11111110
2|-2的反码: 11111111 11111111 11111111 11111101
2|-2的原码: 10000000 00000000 00000000 00000010
System.out.println(2|-2) //最后输出为-2
2 ^ -2
2的原码: 00000000 00000000 00000000 00000010
2的反码: 00000000 00000000 00000000 00000010
2的补码: 00000000 00000000 00000000 00000010
-2的原码: 10000000 00000000 00000000 00000010
-2的反码: 11111111 11111111 11111111 11111101
-2的补码: 11111111 11111111 11111111 11111110
2的补码 : 00000000 00000000 00000000 00000010
2^-2的补码 : 11111111 11111111 11111111 11111100
2^-2的反码: 11111111 11111111 11111111 11111011
2^-2的原码: 10000000 00000000 00000000 00000100
System.out.println(2^-2) //最后输出为-4
~2
2的原码: 00000000 00000000 00000000 00000010
2的反码: 00000000 00000000 00000000 00000010
2的补码: 00000000 00000000 00000000 00000010
~2的补码: 11111111 11111111 11111111 11111101
~2的反码: 11111111 11111111 11111111 11111100
~2的原码: 10000000 00000000 00000000 00000011
System.out.println(~2) //最后输出为-3
2>>1
2的原码: 00000000 00000000 00000000 00000010
2的反码: 00000000 00000000 00000000 00000010
2的补码: 00000000 00000000 00000000 00000010
2>>1的补码: 00000000 00000000 00000000 00000001
2>>1的反码: 00000000 00000000 00000000 00000001
2>>1的原码: 00000000 00000000 00000000 00000001
最后输出的结果为1
- 2<<1
-2的原码: 10000000 00000000 00000000 00000010
-2的反码: 11111111 11111111 11111111 11111101
-2的补码: 11111111 11111111 11111111 11111110
2<<1的补码: 11111111 11111111 11111111 11111100
2<<1的反码: 11111111 11111111 11111111 11111011
2<<1的原码: 10000000 00000000 00000000 00000100
最后的结果为-4