0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
最高位符号位0表示正数,这里表示1
1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
最高位符号位1表示负数,这里表示-1
正数: 原码, 反码,(1变0,0变1) 补码,都是一样的。
负数:
原码:
1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
反码:原码符号位不变,其他位取反。
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
补码:反码+1;
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
位运算符
按位与 & :全为1,结果为1
按位或 | :两个有一个为1,结果为1
按位异或 ^ :相同为0,不同为1
按位取反 ~ :0变1,1变0;
算术右移 >> :低位溢出,符号位不变,并用符号位补溢出的高位;
算术左移 << :符号位不变,低位补0;
逻辑右移 >>>:运算规则:低位溢出,高位补0;
计算机运算的时候,都是以补码的方式来运算的。
~2
2的源码: 2是正数,补码和源码相同
0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
取反 ~2的补码
1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 |
~2的反码:(减一)
1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
~2的源码:
1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
结果为-3:
2&3=2; 2|3=3;
~-5
-5的源码:
1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
反码
1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 |
补码
1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
取反
0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
~-5=4;
3^-3;
-3的源码
1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
补码(取反+1)
1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 |
3的补码:和源码相同
0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
3^-3的补码(相同为1,不同为0)
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
3^3的源码:(减一取反)
1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
结果为-3^3=-2
算术右移>>低位溢出,高位补0;