目录
1、原码、反码、补码
原码:将一个整数转换成二进制形式,就是其原码。
反码:对于正数,它的反码就是其原码(原码和反码相同);负数的反码是将原码中除符号位以外
的所有位(数值位)取反,也就是 0 变成 1,1 变成 0。
例如:20的原码是0001 0100,反码也是0001 0100;而-20的原码是1001 0100,反码是1110 1011。
补码:对于正数,它的补码就是其原码;负数的补码是其反码加 1。
例如: 20的原码是0001 0100,补码也是0001 0100;而-20的原码是1001 0100,反码是1110 1011,补码是1110 1100。
注:在计算机内存中,整数一律采用补码的形式来存储。这意味着,当读取整数时还要采用逆向的转换,也就是将补码转换为原码。将补码转换为原码也很简单:先减去 1,再将数值位取反即可。
2、左位运算符(<<)
将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)
例1:20 << 2
1. 20的原码为: 0001 0100
2. 20的补码为: 0001 0100
3. 将补码向左移动2位: 0101 0000
4. 移动之后的原码: 0101 0000
5. 转换成十进制为: 80
图示:
例2:-20 << 2
1. -20的原码为: 1001 0100
2. -20的反码为: 1110 1011
3. -20的补码为: 1110 1100
4. 将补码向左移动2位: 1011 0000
5. 移动之后的反码: 1010 1111
6. 移动之后的原码: 1101 0000
5. 转换成十进制为: -80
图示:
3、右位运算符(>>)
把一个数的二进制形式的最右几位丢弃,最前面补原来最高位的数字(原来是0就补0;原来是1就补1)
例1: 20 >> 2
1. 20的原码为: 0001 0100
2. 20的补码为: 0001 0100
3. 将补码向右移动2位: 0000 0101
4. 移动之后的原码: 0000 0101
5. 转换成十进制为: 5
图示:
例2:-20 >> 2
1. -20的原码为: 1001 0100
2. -20的反码为: 1110 1011
3. -20的补码为: 1110 1100
4. 将补码向右移动2位: 1111 1011
5. 移动之后的反码: 1111 1010
6. 移动之后的原码: 1000 0101
5. 转换成十进制为: -5
图示:
4、无符号右移运算符(>>>)
">>>"也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0 。
例1: 20 >>> 2
结果同20 >> 2为5
例2: -20 >>> 2
-20的源码:10000000 00000000 00000000 00010100
-20的反码:11111111 11111111 11111111 11101011
-20的补码:11111111 11111111 11111111 11101100
右移后的补码:00111111 11111111 11111111 11111011
结果:r = 1073741819