如果移位的数字为正,>>>和>>的工作原理相同。
如果移位数为负,>>>将最高有效位填充为1,而>>操作将MSB填充为0。
我的理解正确吗?
如果负数是在MSB设置为1的情况下存储的,而不是Java使用2s补码的方式,则运算符的行为将完全不同,对吗?
表示负数的方式称为2的补码。为了演示其工作原理,以-12为例。12的二进制值为00001100(假设整数为8位,尽管实际上它们要大得多)。只需将每个位取反即可得到2的补码,得到11110011。然后,简单地加1得出11110100。请注意,如果再次应用相同的步骤,则将得到正数12。
无论如何都变为零,因此12 >>> 1应该给您00000110,即6,而(-12)>>> 1应该给您01111010,即122。如果您实际尝试Java,因为Java int实际上大于8位,所以您得到的数字会更多。 的移位与最高位相同,因此正数保持正数,负数保持负数。12 >> 1是00000110(仍然是6),(-12)>> 1将是11111010,它是负数6。
无论如何都变为零,因此12 >>> 1应该给您00000110,即6,而(-12)>>> 1应该给您01111010,即122。如果您实际尝试Java,因为Java int实际上大于8位,所以您得到的数字会更多。
的移位与最高位相同,因此正数保持正数,负数保持负数。12 >> 1是00000110(仍然是6),(-12)>> 1将是11111010,它是负数6。