byte类型 127+1=-128

本文详细解释了计算机中使用补码表示数据的原因和优势,通过实例展示了补码如何解决原码和反码在表示负数和减法运算中的问题。特别讨论了在Java中byte类型的存储,指出127+1为何会得到-128,揭示了字节数据类型的环形存储特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

byte是JAVA中最基础的一种数据类型,字节长度是1字节,取值范围是-128~127。
字节是计算机信息技术用于计量存储容量和传输容量的一种计量单位,一个字节等于八位二进制。即1byte = 8bit。
想知道byte类型 127+1是 -128,就必须知道数据在计算机中的存储形式。
计算机对数据的二进制存储形式——补码
以十进制数45和-45为例
原码:

  • 45:00101101

  • -45:11010011
    在最高位符号位区分正数还是负数,0代表正数,1代表负数
    反码:

  • 45:00101101

  • -45:11010011
    正数的原码和反码相同,负数的反码是原码的符号位不变,其余各位按位取反
    补码:

  • 45:00101101

  • -45:11010011
    正数的原码反码补码都相同,负数的补码等于在其反码基础上末尾加1
    ** 计算机设计反码的原因**
    因为计算机只有加法,没有减法,再做减法运算的时候,可以认为是加上一个负数,这样可以减少计算电路的复杂度,是原码进行减法运算会出现的问题,例如计算1+1,因为计算机中有加法,没有减法,所以,计算机会自动换成1+(-1)

  • 原码的结果为-2与实际不相符

  • 反码的结果为-0, 计算结果正确但浪费编码的位置

  • 砝码的计算结果为0,也不会出现±0的问题
    总结: 反码是为了解决减法运算补码,是为了解决反码产生±0的问题
    ** Byte类型中127+1是-128的原因**
    使用补码不仅仅修复了零的符号以及存在两个编码的问题,而且还能多表示一个低位数,这也就是为什么八位二进制,使用原码和反码表示的范围为-127~127,使用补码表示的范围是-128 ~127。
    因为机器使用补码,所以对编程中常用到的32位int类型可以表示范围是-231 ~ 231-1,因为第一位表示的示符号为20用补码,表示时又可以多保存一个最小值。
    我认为byte型数据在计算机中的存储可以看成一个圆环。

通俗来说就是整数溢出:
byte字节是8位字节,第一位是符号位用于表示正负,剩下的7位表示数字

二进制数十进制数二进制数十进制数
00000000011111111-1
00000001111111110-2
0111111112710000000-128

0占据了整数的一个位置,因此整数就比负数少一位
而127再加1的话就会变成10000000也就是128

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值