java为何整型表示的数值的范围正负不一样

通过byte理解:

补码的优势:

  1. 统一加减法:CPU无需区分正负数,加法器可直接处理所有运算
    1. 如 5 - 3 转换为 5 + (-3)
  2. 消除双0问题
    1. 补码中的0只有一种表示 0000 0000
    2. 原码,反码中的零存在 +0 和 -0

正数 :原码 = 反码 = 补码

负数:反码 等于原码符号位不变,其余位取反   补码:反码+1

数据类型

原码

反码

补码

+0

0000 0000

0000 0000

0000 0000

-0

1000 0000

1111 1111

0000 0000

√为什么byte的负数最小值是-128而不是-127?

补码的对称性问题,若仅用7位表示数值,理论上负数范围

 -127(1111 1111)到-0(1000 000)

然而,通过补码解决了双0问题(+0 -0 都是0然而原码反码的0的表示要用两种二进制数表示,补码只需要一种),这就相较于原码反码多出了一个表示数值的二进制数,则仅这多出来的1000 0000则被直接定义为-128(并非通过取反加一得出)

在计算机中,存储有符号整数,使用补码

正数通过原码存储(因为正数的原反补码一样)

负数通过补码存储(比如-127 补码:1000 0001)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值