要想运算<<、>>、<<<、>>>这些符号
首先必须了解:
①十进制数和二进制数相互转换。
②原码、反码和补码。
’<<'表示左移移,不分正负数,低位补0;
正数:比如运算’16<<2’的结果
首先 你要将16转换为二进制数
16的二进制原码为0001 0000
16的二进制反码为0001 0000
16的二进制补码为0001 0000
16<<2就是将16的二进制补码左移两位,低位补0,那么得到:
左移两位后的补码为0100 0000
将得到的补码转换为十进制,那么16<<2的结果为64
负数:比如运算’-16<<2’的结果,首先 你要将-16转换为二进制数
-16的二进制原码为1001 0000
-16的二进制反码为1110 1111
-16的二进制补码为1111 0000
-16<<2就是将16的二进制补码左移两位,低位补0,那么得到:
左移两位后的补码为1100 0000
左移两位后的反码为1011 1111
左移两位后的原码为1100 0000
将得到的原码转换为十进制,那么-16<<2的结果为-64
’>>'表示右移,如果该数为正,则高位补0,若为负数,则高位补1;
正数:比如运算’16>>2’的结果,首先 你要将16转换为二进制数
16的二进制原码为0001 0000
16的二进制反码为0001 0000
16的二进制补码为0001 0000
16>>2就是将16的二进制补码右移两位,高位补0,那么得到:
右移两位后的补码为0000 0100
将得到的补码转换为十进制,那么16>>2的结果为4
负数:比如运算’-16>>2’的结果,首先 你要将-16转换为二进制数
-16的二进制原码为1001 0000
-16的二进制反码为1110 1111
-16的二进制补码为1111 0000
-16>>2就是将16的二进制补码右移两位,高位补1,那么得到:
右移两位后的补码为1111 1100
右移两位后的反码为1111 1011
右移两位后的原码为1000 0100
将得到的原码转换为十进制,那么-16>>2的结果为-4
**
'>>>'表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0
**
正数:比如运算’16>>>2’,它的运算过程同等于’16>>2’,
方法参考上面’16>>2’的正数运算。
负数:比如运算’-16>>>2’的结果,首先 你要将-16转换为二进制数(32位)
-16的二进制原码为10000000 00000000 00000000 00010000
-16的二进制反码为11111111 11111111 11111111 11101111
-16的二进制补码为11111111 11111111 11111111 11110000
-16>>>2就是将16的二进制补码右移两位,高位补0,那么得到:
右移两位后的补码为00111111 11111111 11111111 11111100
转换为十进制,那么-16>>>2的结果为1073741820