为什么8位二进制的取值范围是-128~127

我的疑惑

一个字节8位,其中最高位表示正数和负数,0表示正数,1表示负数。所以能够表示-128~+127。

01111111可以表示+127。正数这一段没有问题,负数这一段有两个疑问

11111111只能表示-127啊,还有10000000表示什么啊,难道是-0。这样没有什么意义啊,其实表示的就是-128,但是在计算中又会出现问题,比如数学上,1+(-1)=0,而在二进制中00000001+10000001=10000010,换算成十进制为-2。

解决问题

其实在计算机里面将正数都保存成了补码。对于正数的补码是它本身,对于负数的补码是其反码+1(反码:将二进制数按位取反)。我们举个例子

127-128,一般在计算机中都是使用加法的。

  127 -128
原码 01111111 10000000
反码   11111111
补码 01111111 10000000

127     01111111

-128    10000000

        11111111因为这个是补码,转为反码就是11111110,原码是10000001=-1

为什么8位二进制的取值范围是-128~127,指的是补码的范围。

一个有意思的发现

里面的模-负数绝对值的原码=补码(可以看第一个参考地址)

我对模的定义,每一位二进制都可以存2个数,也就是它的容量。对于一个字节8位二进制,它的模是2^{8}=256,也就是-128~+127里面中整数的个数。

扫描二维码关注公众号,回复: 9745932 查看本文章

参考

第一个比较经典

https://blog.csdn.net/leonliu06/article/details/78685197

https://zhidao.baidu.com/question/143216665.html

发布了102 篇原创文章 · 获赞 117 · 访问量 33万+

猜你喜欢

转载自blog.csdn.net/pursuit_zhangyu/article/details/95631976