gpt4 book ai didi

java - 如何在Java中将两个字节加在一起,如果有溢出则环绕

转载 作者:搜寻专家 更新时间:2023-11-01 02:56:47 27 4
gpt4 key购买 nike

我需要使用补码二进制加法将仅由 ASCII 字符组成的字节数组中的所有字节相加,并将结果存储为单字节校验和。

我试图通过弄清楚如何将 2 个字节加在一起来从基础开始,但不知道如何在添加两个二进制值时有额外的位时“环绕”。

我制作了一个测试程序,因此我可以使用不同的值。在下面的示例中,我尝试添加两个二进制数,每个代表十进制值 255。

byte b1 = (byte) 255;
String s1 = String.format("%8s",Integer.toBinaryString(b1 & 0xFF)).replace(' ', '0');
System.out.println("byte 1: " + s1); // 1111111

byte b2 = (byte) 255;
String s2 = String.format("%8s",Integer.toBinaryString(b2 & 0xFF)).replace(' ', '0');
System.out.println("byte 2: " + s2); // 1111111

byte sum = 0;

sum += b1;
sum += b2;

String s3 = String.format("%8s", Integer.toBinaryString(sum & 0xFF)).replace(' ', '0');
System.out.println("sum of byte 1 and byte 2: " + s3); // should be 1111111

我期望输出是:

字节 1:11111111
字节 2:11111111
字节 1 和字节 2 之和:11111111

但实际输出是:

字节 1:11111111
字节 2:11111111
字节 1 和字节 2 之和:11111110

如何环绕额外的位以获得正确的结果?

最佳答案

因为您只使用 byte,所以您可以将加法结果存储在更大的原始类型中,例如 int。通过这样做,您将可以轻松访问溢出位,您可以提取(使用按位运算)并将其添加到现有总和中:

int sum = b1 + b2;
sum += (sum >> 8) & 1;
String s3 = String.format("%8s", Integer.toBinaryString(sum & 0xFF)).replace(' ', '0');
System.out.println("sum of byte 1 and byte 2: " + s3); // should be 11111111

如果溢出位的值为0,则什么也不会发生。但如果它是1,就会发生溢出,该位将回绕。

关于java - 如何在Java中将两个字节加在一起,如果有溢出则环绕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56205329/

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