gpt4 book ai didi

java - 为什么我的 Java Short 会被无符号右移的 1 填充?

转载 作者:行者123 更新时间:2023-12-02 11:20:23 27 4
gpt4 key购买 nike

当我执行无符号右移时,如下所示:

short value = (short)0b1111111111100000;
System.out.println(wordToString(value));
value >>>= 5;

我得到1111111111111111。因此,该值右移,但填充了 1,这似乎与 >>

具有相同的行为

但是,我希望它无论符号如何都用 0 填充,产生以下结果:0000011111111111

这是一个与我的代码一起使用的相关 REPL: https://repl.it/@spmcbride1201/shift-rotate

最佳答案

您所得到的行为与在应用移位操作之前将 short 提升为 int 的事实有关。事实上,如果将移位运算符的结果分配给 int 变量,您将得到预期的结果:

  public static void main(String[] args) {

short value = (short)0b1111111111100000;
System.out.println(value); //-32, which is the given number
int result = value >>> 5;
System.out.println(result); //134217727, which is 00000111111111111111111111111111

}

如果将结果分配给 short,则只能获得较低位。

这是因为字节码语言并不真正处理任何小于 int 的类型。

关于java - 为什么我的 Java Short 会被无符号右移的 1 填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60155666/

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