关于JAVA中<<,>>和>>>运算

it2022-05-06  0

要想运算<<、>>、<<<、>>>这些符号 首先必须了解:                        ①十进制数和二进制数相互转换。                        ②原码、反码和补码。

’<<'表示左移移,不分正负数,低位补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


最新回复(0)