美文网首页
Java中,byte扩展到int的高位是补零还是补符号位扩展?

Java中,byte扩展到int的高位是补零还是补符号位扩展?

作者: knock | 来源:发表于2020-07-28 22:41 被阅读0次

从窄的基本数据类型(如byte)扩展到较宽的类型(如int)时,是补零扩展还是补符号位扩展?

**

Java中只有有符号数,当从小扩展到大

**
一、正数,因为为符号位是0,所以无论如何都是补零扩展

二、负数补零扩展和按符号位扩展结果完全不同
1.补符号数,原数值不变。
int类型 11111111 11111111 11111111 10000001(补码) -127
byte类型 10000001(补码) -127

2.有符号数补零扩展,数值为无符号数
从小扩展大**时,需要用&0xff这样方式来确保是按补零扩展。
1111111111111111111111111 10000001&11111111=000000000000000000000000 10000001 ,
这个值算一下就是129,相当于把有符号数看成无符号数, 256 + (- 127)=129

大向小处理,符号位自动无效,所以不用处理。

read()方法返回值为什么是int

read()方法读取的是一个字节,为什么返回是int,而不是byte
因为字节输入流可以操作任意类型的文件
比如图片音频等,这些文件底层都是以二进制形式的存储的
如果每次读取都返回byte
有可能在读到中间的时候遇到111111111
那么这11111111是byte类型的-1,我们的程序是遇到-1就会停止不读
后面的数据就读不到了
所以在读取的时候用int类型接收
如果11111111会在其前面补上24个0凑足4个字节
那么byte类型的-1就变成int类型的255了
这样可以保证整个数据读完,而结束标记的-1就是int类型

https://blog.csdn.net/jump_sayyeah/article/details/90042175

相关文章

  • Java中,byte扩展到int的高位是补零还是补符号位扩展?

    从窄的基本数据类型(如byte)扩展到较宽的类型(如int)时,是补零扩展还是补符号位扩展? ** Java中只有...

  • Java中整数基础知识

    整数基础Java中,整数都是有符号的,最高位是符号位,0表示正数,1表示负数。有四种,byte,short,int...

  • 为什么int的最小值绝对值比最大值大1

    关于int取值范围的疑问 在Java中int是占4个字节的,意味着它是32位。同时int是有符号的,那就说它最高位...

  • 工作笔记(八)

    java中byte[]和int互转 众所周知计算机中有二进制组成,byte有8位2进制组成,java中int由4位...

  • Java中的 &0xFF、~运算符

    java中byte转换成int时,如果我们期望得到的int是允许>=128的无符号数,或者int需要再转换成16进...

  • Java中byte类型整数与int类型整数大小比较

    Java中byte类型整数与int类型整数大小比较 一个byte数,若最高位为1,相当于负数。因为正数大于负数,则...

  • 也谈c语言int类型最小值

    c语言中int是带符号的32位数,最高位为符号位,其余31位为数值位,最大的int值很好算,那就是符号位为0,其余...

  • int表示范围及解释

    计算机中32位int类型变量的范围,其中int类型是带符号整数。 正数在计算机中表示为原码,最高位为符号位: 1的...

  • 二分查找法

    Java>>与>>>的区别>>:带符号右移。正数右移高位补0,负数右移高位补1。比如:4 >> 1,结果是2;-4...

  • 扩展数字位

    用法:有符号向无符号转换的时候如果把字符处理为无符号的,那么int的高位全部补0; 数位压缩:弃高位 留低位 3...

网友评论

      本文标题:Java中,byte扩展到int的高位是补零还是补符号位扩展?

      本文链接:https://www.haomeiwen.com/subject/cjfcrktx.html