首页 > 编程知识 正文

byte占用的字节数,byte的取值范围为什么是-128-127

时间:2023-05-06 10:59:08 阅读:222638 作者:1181

最近回头看看基础,又忘记了byte 一个字节的数据大小范围为什么是-128~127是怎么来的了,后来想通以后,记了下来,如有不足之处,请斧正!

1:首先我们知道计算机底层都是加法计数器运算,不能计算减法,但是我们生活中还必须有负数,有减法,这样符合正常的人类数学思维习惯。

2:我们还知道一个byte字节占八位,也就是八位1和0组成的二进制数串,这个数串最小是00000000,最大是11111111,也就是表示了0-255的范围,这个都懂,那么问题来了。这个范围都是正的啊,没有负数,没有负数就没有减法,怎么办?

3:其实我们正好反过来解决了这个问题,计算机底层都是要将一个byte存储的负数转换成0-255范围的正数来计数的,但是按照人类的习惯,要直接在写代码的时候就有负数,有减法才能符合人类的思维习惯,那么怎么将负数和减法在计算机的世界里表现出来呢。这时候补码就诞生了。

4:在了解补码之前首先了解什么是同模(数学世界里的)

一个时钟显示共有十二个小时,时针旋转一周后回到原来的状态,实际的数学意义没有变化,变化的是物理意义。时间前进了!!!但是就单单论数学模型意义来讲,该计时系统的Mod为12,也就是说,时针顺时针转8和逆时针转4,效果是一样的。为了符合数学意义,顺时针为+8,逆时针为-4,综上所述: 得  |+8|+|-4|=12

  由此,可以得到一个结论。这种周期性变化的计数模型系统,一个状态加减整数倍的Mod,其状态不会有不会发生变化。

5:了解了同模之后呢,人们开始思考一个数是正还是负唯一区别就是符号了,那么计算机只认识0和1,怎么能认识正负呢?首先观察如下:

00000000=0         11111111=255

00000001 =1        11111110=254

00000010=2         11111101=253

。。。。。。

11111101=253        00000010=2 

11111110=254       00000001 =1 

11111111=255       00000000=0 

我们发现计数器循环一遍又回到了起点(正好走了一倍的mod),证明计数器具有周期性!我们又知道了具有周期性的数学模型,可以按照数学同模的逻辑思考,如下:

00000000=0         11111111=255= -1

00000001 =1        11111110=254= -2

00000010=2         11111101=253= -3

。。。。。。我们顺着规律一直到:

01111111=127       10000000=128=-128

10000000=128      01111111=127=-127

10000001=129      01111110=126=-126

。。。。。。

我们又发现:当01111111+1=10000000时,这个时候最高位从全是0变化到全是1,根据这个条件,我们恰好可以放入区分正负的条件0和1,也就是——最高位代表符号位。

通过观察最高位为0即为正数,所以正数的最大为:127,根据同模概念,负数最大就是-128.

6:那么问题又来了???

计算机表示很无奈。同模那是你们人类的思维,我可不明白同模是啥,我只认识0和1.这怎么办呢???

聪明的人们通过实验规律对比,发明了计算机二进制的补码。那就是惊人的巧合!!!!

补码:去除最高位符号位:正数剩余的位数正好和对应的负数剩余的位数全部相反,相反后+1(补回符号位的实际意义,因为符号位是1,是有实际数学计算意义的)又是原来的负数。这就是补码,补码是用来给计算机看的,要不计算机不知道什么是负数,什么是减法!

 

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。