整型int数据的取值范围是怎么来的?

引言

大家都知道占2个字节的int类型,取值范围是-128~127;那么这个-128究竟是怎么来的呢?

正文

java语言中的byte类型为例,byte占用1个字节byte,共8个bit;也就是8个0或者1来表示正数;在计算机系统中规定第一位表示正负;所以有如下现象:

0000 0000 ~ 0111 1111 表示正数(十进制:+0到+127)
1000 0000 ~ 1111 1111 表示负数(十进制:-0到-127)

由于计算机采取二进制补码来表示负数,所以有
(原码取反+1得到补码(注意:取反不包括符号位))
1000 0000 的补码为 0000 0000 ;
而+0用原码表示也是 0000 0000;
也就是说,+0和-0在二进制系统中存储的编码时一样的

因为我们知道,8位二进制可以表示28个编码,但是当用补码表示负值时,这8个bit就只能表示28-1个编码了(换句话说有一个编码:1000 0000,他的补码和另外一个编码重复了。。。)

由于任何一个原码转变为补码时都不会变成1000 0000;
所以,人为规定1000 0000这个补码编码对应的十进制数**-128**

综上,补码系统中,javaint类型表示的取值范围为:-128~127

(为了找这个人为,肝掉两小时)

上述内容如有不妥,看官一定私信或评论指正啊!

参考文章:
https://www.cnblogs.com/hxh88/p/9284049.html
https://blog.csdn.net/linux12121/article/details/51236654
https://blog.csdn.net/cyhleo/article/details/6849704

相关背景知识

  1. 负数在计算机中是以补码表示的
  2. 补码就是:原码取反+1;
  3. 反码:就是0变1;1变0;
  4. 模:指一个计量系统的计数范围;例如时钟的模是12,超过12就会溢出;12这个值也在计量器上显示不出来,计量器只能显示模的余数(0,1,2,3。。。。11)
  5. 计算机减法系统比较复杂,而加法器比较容易实现,所以如果可以用加法替代减法的话,然后使用同一种电路就可以实现整数的加减法运算了。
  6. 例如在4位计算机中,模是16;5-3=2的结果和5+16-3=16+2=2的结果一样;把二进制负数用补码表示也是为了算减法时直接+这个负数就可以了

疑问:人为规定是如何实现的 ?

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值