【发布时间】:2026-01-23 22:30:01
【问题描述】:
我很难理解负无符号位运算符。 例如,我有下面的代码。它打印出值 7,我不明白为什么。
int num1 = -37, num2 = -3;
System.out.println( num1 >>> num2);
// Essentially the same as System.out.println( -37 >>> -3);
// I just wanted to emphasize that i am working with Integers
据我所知,二进制格式的数字-37如下所示。
11111111 11111111 11111111 11011010 = -37(十进制格式)
如果我们是 3 的无符号右移(-37 >>> 3,而不是 -37 >>> -3),据我所知(如果我的理论有缺陷或缺乏关键概念,请纠正我),它会移动字节向右移动 3 位,在最右边位置掉出的 3 位出现在最左边的位置处于向下翻转状态(从零到一),这意味着我们得到以下结果。
00011111 11111111 11111111 11111011 = 536870907(十进制格式)。
但是,如果我们应用无符号右移 -3 (-37 >>> -3),我们得到结果 7。我不明白为什么它返回 7。有人可以向我解释一下吗?
【问题讨论】:
标签: java bit-manipulation bit-shift