>>>和>>运算符之间的区别

Mur*_*ali 5 java bit-shift

如果移位的数字是正数>>>和>>工作相同.

如果移位的数字是负的>>>用1s填充最高有效位,而>>操作移位用0填充MSB.

我的理解是否正确?

如果负数存储时MSB设置为1而不是Java使用的2s补码方式,那么运算符的行为会完全不同,对吗?

Mat*_*rog 8

负数表示的方式称为2的补码.为了演示这是如何工作的,以-12为例.12,二进制,是00001100(假设整数是8位,但实际上它们要大得多).通过简单地反转每一位得到2的补码,你得到11110011.然后,只需加1得到11110100.请注意,如果你再次应用相同的步骤,你会得到正12回.

>>>无论如何都会变为零,所以12 >>> 1应该给你00000110,这是6,而(-12)>>> 1应该给你01111010,这是122.如果你真的尝试这个Java,你会得到一个更大的数字,因为Java整数实际上远大于8位.

>>与最高位有点相同,因此正数保持正数,负数保持负数.12 >> 1为00000110(仍为6),( - 12)>> 1为11111010,为负6.