gpt4 book ai didi

java - 添加后的意外结果

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:00:49 26 4
gpt4 key购买 nike

我现在正在用 Java 编写一个个人项目,最近第一次使用位运算。我试图将两个字节转换为一个短字节,一个字节是高 8 位,另一个是低 8 位。

我在运行下面的第一行代码时遇到了错误。

不正确的结果

short regPair = (short) ( (byte1 << 8) + (byte2) );

正确结果

short regPair = (short) ( (byte1 << 8) + (byte2 & 0xFF) );

预期结果是:AAAAAAAABBBBBBBB,其中 A 表示来自 byte1 的位,B 表示来自 byte2.

使用第一行代码,我将在经过位移的字节 1 和添加到字节 2 之间得到典型的加法。

错误结果示例

byte1 = 11, byte2 = -72

result = 2816 -72
= 2744

当使用产生预期结果的代码行时,我可以获得 3000 的正确答案。我很好奇为什么 byte2 需要位掩码。我的想法是,它在加法之前将 byte2 转换为二进制,然后对两个字节执行二进制加法。

最佳答案

在不正确的情况下,byte2 被提升为 int 因为 + 运算符。这不仅仅意味着在 byte2 的二进制表示形式的开头添加一些零。由于整数类型在 two's complement 中表示在 Java 中,将添加 1。提升后,byte2变为:

1111 1111 1111 1111 1111 1111 1011 1000

通过执行 & 0xFF,您强制提升为 int 首先,然后保留最低有效 8 位:1011 1000 并将其他所有内容设为 0。

关于java - 添加后的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53938650/

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