gpt4 book ai didi

java - 为什么ip地址值为int 255

转载 作者:行者123 更新时间:2023-12-01 06:53:29 26 4
gpt4 key购买 nike

我有一个简单的程序来查找我的 IP 地址并将其转换为字符串。为什么 b[i] 值低于 (int)255

public class FirstSocketProgramming {  

public static void main (String arg[]){

InetAddress local = null;

try {

local = InetAddress.getLocalHost();

} catch (UnknownHostException e){

System.err.println

("Identity Crisis!");

System.exit(0);

}

byte[] b = local.getAddress();

System.out.println (b.toString());
System.out.println (b.length);
String strAddress="";

for (int i = 0; i < b.length; i++)

strAddress += ((int)255&b[i]) + ".";

System.out.println ("Local = " + strAddress);

}

}

最佳答案

byte 数据类型基于 Two's complement二进制有符号数字表示形式,值范围为 -128 到 +127。

0 到 127 之间的正值的最高有效位等于 0,代表 +。这里的二进制表示与其数值相同,例如 byte 00000100 = int 4

从 -128 到 -1 的负值的最高有效位等于 1,表示 -然而,在负数范围内,二进制补码表示形式与它的数值相同,例如您会期望byte 10000100等于int 132 code>,但实际上是 -124。简单地将 byte 转换为 int 是没有帮助的。

转换只是将 1 个字节加宽为 4 个字节,10000100 ==> 11111111111111111111111110000100 等于 -124,而不是 132,因为 int 数据类型也是基于 Two 的补充。将 byte 转换为 int 是朝着正确方向迈出的一步,但是您还需要摆脱前面的所有这些。 255&b[i] 技巧可以实现这一点。

这就是 255&b[i] 中发生的情况:
根据JLS中定义的转换规则& 按位运算符首先将其操作数转换为 int,这意味着 255&b[i]((int)255)&((int)b[ 相同我])。当 byte 转换为 int 时,它只会变得更宽:

10000100 = 字节-124 ==> 11111111111111111111111110000100 = int -124

然后执行按位与。

11111111111111111111111110000100 = int -124 
&
00000000000000000000000011111111 = int 255
--------------------------------
00000000000000000000000010000100 = int 132

最终结果是一个int 132

关于java - 为什么ip地址值为int 255,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19015157/

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