为了账号安全,请及时绑定邮箱和手机立即绑定

通过InetAddress 获取字节数组IP时 byte[] bytes = address.getAddress();,出现负数

InetAddress address = InetAddress.getLocalHost();

System.out.println("主机ip地址:"+address.getHostAddress());

System.out.println("主机名称:"+address.getHostName());

byte[] bytes = address.getAddress();

System.out.println("字节数组型的IP地址"+Arrays.toString(bytes));

输出:

主机ip地址:192.168.119.35

主机名称:WIN-R5PAKVOQ0S5

字节数组型的IP地址[-64, -88, 119, 35]


问题:

字节数组型的IP地址[-64, -88, 119, 35]

为什么会出现  -64  -88 现象

正在回答

4 回答

这是因为一个byte只能表示8位,而第一位是符号位,第一位0表示正,第一位1表示负。(例如:192换成2进制就是 11000000,因为第一位是‘1’故为负数,值=(符号位不变,其他取反加1)=64),不懂得话就网上查查原码和补码

1 回复 有任何疑惑可以回复我~
#1

nanisore_0

168的二进制是10101000,转过来就是-40,而不是-88,求解。
2017-09-03 回复 有任何疑惑可以回复我~
#2

nanisore_0 回复 nanisore_0

我弄错了,168的二进制是10101000,转过来就是-88~
2017-09-03 回复 有任何疑惑可以回复我~
#3

慕田峪1616461

为什么要转成它的补码的形式呢
2017-09-16 回复 有任何疑惑可以回复我~

这个是因为存储的是byte,而byte本身取值范围已经决定了

0 回复 有任何疑惑可以回复我~

byte的取值范围是-128~127,怎么解释你应该明白了吧!

0 回复 有任何疑惑可以回复我~

同问 找到原因了吗

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

通过InetAddress 获取字节数组IP时 byte[] bytes = address.getAddress();,出现负数

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信