首页 > 编程知识 正文

byte是什么数据类型,java中int类型占用几个字节

时间:2023-05-05 07:45:32 阅读:52182 作者:2329

如果你写过套接字编程等通信类的代码,你应该对这个问题不太了解。

结论先说byte 0xff 是将byte从(-128 至 127)转化成 int(转化后的数值范围: 0 至 255)。

其实就是1个byte有两种表示方法,我们既可以用-128 - 127这段范围来表示一个字节,也可以用 0 - 255这个范围的数来表示一个字节。

请看demo使用Java的inet地址类获取我的当前ip

publicclassinetaddresstest { publicstaticvoidmain [ ] args } throwsunknownhostexception { inetaddresslocalhost=inet } byte [ for (byteb :地址) system.out.print(b ' ); }}输出结果

-64 -88 2 119本机ip

好像不是,我们的ip地址用0 - 255表示,不会出现负数。

所以用别的写法,把取出的字节0xff

publicclassinetaddresstest { publicstaticvoidmain [ ] args } throwsunknownhostexception { inetaddresslocalhost=inet } byte [ for (byteb :地址) system.out.print ) ) ) b0xff ) '); }}结果

1921682119 processfinishedwithexitcode 0还是我们想要的结果

为什么需要转换,是因为Java的byte是有符号的,他的范围只有-128 - 127。

我们使用tcp等协议时,首先将传输的消息转换为字节流,然后再传输。 在编程语言中,用字节流通中常用的十进制字节数组表示。

如果我们用0-255表示一个字节,而不想用负数,该怎么办?

很遗憾,Java没有无符号字节。 要存储0-255,只能使用int。

另一方面,int的范围为(-2^31 )2^31-1 ),仅使用了256个。 剩下的空间都浪费了,得不偿失啊。

所以,我们保存的时候,传输的时候可以使用byte,但是使用的时候需要进行转换。 那么,为什么0xff可以得到无符号字节呢?

0xff的作用为十六进制,0xff在Java中以什么类型存储呢?

很明显吧。0xff是整数。

假设我现在要转换字节-1

-1的原码、反码、补码分别如下。

原码1000001反码0111110补码1111 11111当前运算为0xff。 虽然ff是(1111 11111 ),但0xff前面有24个0,因为他在整数类型中占4个字节,而32是。

用-1的补数计算

- 1011110 xff 000000000000000000000111=00000000000000000000000000000000001111=255实际上,在Java中,“哪个数量0xff就是那个数量本身

“任意整数0xff=本身”没有问题

但是字节0xff被另一个维度拖着,从字节进化到了int。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。