gpt4 book ai didi

java - 右逻辑/无符号移位为符号位插入 1 而不是 0

转载 作者:行者123 更新时间:2023-12-04 05:30:26 25 4
gpt4 key购买 nike

我正在处理从 CCS 转换浮点数,它不遵循 IEEE 标准(而不是符号位、指数、尾数,它们使用指数、符号位、尾数);我在使用 >>> 时遇到了一些奇怪的行为。运营商。

给予

byte byte1=(byte)0x8A;     //10001010
byte byte2=(byte)(byte1>>>1); //11000101

>>>指定它将插入 0 ,为什么我会收到 1 ?

我可以围绕这个编码,只需手动翻转位,但我不想最终发现它是特定于平台的。

最佳答案

在 java 中,字节在对它们进行移位操作之前自动转换为整数。从密码学上讲,您所做的相当于:

byte byte2=(byte)(((int)byte1)>>>1);

而且,当然,转换为 int 符号会扩展。如果您将结果保留为整数,您将看到(当时)的预期值 0x7FFFFFC5。

为了解决这个问题,只需屏蔽第 8 位平坦。
byte byte2 = (byte) (byte1 >>> 1 & 0x7F);

Related question

这种行为不是明智和预期的吗,Java 不是很棒吗?

关于java - 右逻辑/无符号移位为符号位插入 1 而不是 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12698105/

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