关于C中为何一个字节表示有符号数范围是[-128-127]

1.首先要知道计算机发展到某个阶段后统一用补码二进制进行存储数据,

2.每个源码都必须利用,不得浪费,

知道了这两点,通过分析我们知道范围是11111111 - 01111111,即-127 - 127;没错,就是-127  -  127;

然后,有一点:这里存在两个可表示十进制0的源码:10000000,00000000;即-0,+0;然后发明者规定十进制0直接用00000000这个补码来表示就可以了,那么,一个字节8个位,

这8位按照计数原理得出的所有源码中,都可以一一对应于一个十进制数,唯独10000000这个源码没有利用到,那就浪费了一个编码,大神通过推断,最后找到一个十进制数:

-128,-128的源码被8个位截断后的样子刚好就是:10000000,为何说截断呢,因为-128无法用8个位进行编码(即无法用8个位的编码来表示这个-128,需要拓展为用9个位来可以编码);

之所以用-128这个十进制数,原因是这个-128的源码被8位截断后存放在8位中参与整数的各种计算都不会影响到+-*/定律;所以,发明者就用10000000这个源码来表示-128;

但是我们要知道-128的编码不是10000000;但是计算内部已经定义了这种协议,采用8位的编码中的源码位10000000的话,就转为-128的编码参与计算,实际上就是不转为-128的编码参与计算,10000000本身参与计算也不会影响正常的+-*/;

这里推荐另一篇文章:

http://blog.csdn.net/daiyutage/article/details/8575248

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值