为什么Java中基本类型的取值范围正值比负值少1?

为什么Java中基本类型的取值范围正值比负值少1?

一、Java中的基本类型

Java中的基本类型

二、正零与负零

*以byte为例 *
byte 1字节 8位
正值范围:0000 0000 -0111 1111
负值范围:1000 0000-11111 1111
其中,首位为符号位,后七位为数值位
那么,会出现 0000 0000(正零)
1000 0000(负零)
零只需要一种变现形式,因此,利用补码将负零表示为-128

三、原码、反码、补码

正数以0001 0101为例

原码:0001 0101
反码:0001 0101(不变)
补码:0001 0101(不变)

负数以1001 0101为例

原码:1001 0101
反码:1110 1010(符号位不变,数值位取反)
补码:1110 1011(反码加1)

对于负零1000 0000

原码:1000 0000
反码:1111 1111(符号位不变,数值位取反)
补码:1111 1111+1=1000 0000(反码加1,此时加1后,符号位不变,因此,首位1即表示符号位,也表示数值位,即-128,将负零转换成-128

四、总结

正数原码、反码、补码都相同
负数反码为原码符号位不变数值位取反,补码为反码数值位加1

为什么正值比负值少1
因为0000 0000(正零)和1000 0000(负零)都表示零,没有意义,因此将1000 0000的第一位既看作符号位,又看成数值位,将其表示为-128,因此,正值比负值少1

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值