gpt4 book ai didi

Java:负数右移

转载 作者:IT老高 更新时间:2023-10-28 20:25:51 26 4
gpt4 key购买 nike

我对负数的右移操作很困惑,这里是代码。

int n = -15;
System.out.println(Integer.toBinaryString(n));
int mask = n >> 31;
System.out.println(Integer.toBinaryString(mask));

结果是:

11111111111111111111111111110001
11111111111111111111111111111111

为什么将负数右移 31 而不是 1(符号位)?

最佳答案

因为在 Java 中没有无符号数据类型,所以有两种类型的右移:arithmetic shift >>logical shift >>> . http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

算术移位 >>将保留符号位。
Arithmetic shift

无符号移位 >>>不会保留符号位(因此填充 0 s)。
Logical shift

(来自维基百科的图片)


顺便说一下,算术左移和逻辑左移的结果是一样的,所以只有一个左移<< .

关于Java:负数右移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15457893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com