gpt4 book ai didi

java - 加上 0xff,需要澄清

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

在下面的代码片段中考虑用注释的等价物替换第 8 行

1. private static String ipToText(byte[] ip) {
2. StringBuffer result = new StringBuffer();
3.
4. for (int i = 0; i < ip.length; i++) {
5. if (i > 0)
6. result.append(".");
7.
8. result.append(ip[i]); // compare with result.append(0xff & ip[i]);
9. }
10.
11. return result.toString();
12. }

.equals() 测试确认添加 0xff 不会改变任何内容。是否有应用此掩码的原因?

最佳答案

byte在 Java 中是介于 −128 和 127 之间的数字(有符号,就像 Java 中的每个整数一样(除了 char 如果你想计算它的话))。通过使用 0xff你强制它成为积极的int在 0 到 255 之间。

之所以有效,是因为 Java 将执行扩展转换为 int ,使用符号扩展,所以不是负数 byte你会得到一个负数 int .用 0xff 掩蔽将只留下低 8 位,从而使数字再次为正数(以及您最初的意图)。

您可能没有注意到差异,因为您使用 byte[] 进行了测试只有小于 128 的值。

小例子:

public class A {
public static void main(String[] args) {
int[] ip = new int[] {192, 168, 101, 23};
byte[] ipb = new byte[4];
for (int i =0; i < 4; i++) {
ipb[i] = (byte)ip[i];
}

for (int i =0; i < 4; i++) {
System.out.println("Byte: " + ipb[i] + ", And: " + (0xff & ipb[i]));
}
}
}

这打印

Byte: -64, And: 192
Byte: -88, And: 168
Byte: 101, And: 101
Byte: 23, And: 23

显示 byte 中的内容之间的区别,当它仍然是 int 时进入字节的内容& 的结果是什么操作是。

关于java - 加上 0xff,需要澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9949856/

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