为什么btye类型的范围数据范围是-128~+127(详细易懂版)


如果你不想深究你只需要知道byte代表一个字节(八位),八位二进制可以表示256个状态即2^8.

对于无符号数范围就是0~255,而对于有符号数-128~0~+127(-2^7~+(2^7-1))一共也是256个状态。


如果你想深究这个问题(毕竟我有强迫症)好奇这个-128是怎么来的,你需要先了解以下几个概念(非计算机专业勿进)

1.机器数:一个数在计算机中的二进制表示形式叫做这个数的机器数,最高位存放符号位0正1负 

例:十进制 3—>二进制(八位)0000 0001

      十进制-3 —>二进制(八位)1000 0001

2.真值:因为第一位是符号位,所以机器数的形式值就不等于真正的数值

3.原码、反码、补码是机器存储具体数字的编码方式

  ①原码:符号位加上真值的绝对值

     [+1]原=0000 0001

     [-1]原=1000 0001

     八位二进制取值范围[1111 1111 ,0111 1111]即[-127,+127]

  ②反码:正数于原码相同,负数的反码是其原码基础上,符号位不变,其余各位取反

     [+1]=[0000 0001]原=[0000 0001]反

     [-1]=[1000 0001]原=[1111 1110]反

  ③补码:正数与原码相同,负数的补码是在其反码的基础上+1

    [+1]=[0000 0001]原=[0000 0001]反=[0000 0001]补

    [-1]=[1000 0001]原=[1111 1110]反=[1111 1111]补

4.对于有符号数原本应是-127~-0 +0~+127共256个状态但是0在数学中只有唯一代表

 [+0]=[0000 0000]原=[0000 0000]反=[0000 0000]补   

 [-0]=[1000 0000]原=[1111 1111]反=[1 0000 0000]补 

因为是八位二进制所以最高位舍弃即[-0]=[0000 0000]补。发现0在补码表示中唯一,所以计算机存储的是数的补码

下面正式介绍(-128~+127)的由来

因为第一位是符号位,所以对于正数八位二进制能代表的最大的数是[0111 1111]补,这个数翻译成十进制就是+127(正数反码补码都相同)

0的存储形式为[0000 0000]上面提到

以1开头的原码中 [-1]=[1000 0001]原     [-127]=[1111 1111]原   计算机存储中是补码

所以 —— 补码           [1111 1111]补               [1000 0001]补   即补码1000 0001~1111 1111 是表示-127~-1

这时不难发现还剩下一串补码为1000 0000的数,就把这串码表示成-128(因为正数表示不下,八位二进制最大正数为+127)

 (另一种理解方式:负数的补码在机器中的算法是其绝对值各位取反再+1(不管符号位)

   最小数的补码形式为1000 0000它应该是一个负数的绝对值各位取反再加一得到的

  即1000 0000-1=0111 1111再各位取反1000 0000为128又因为是负数 所以[1000 0000]补所代表的数是-128

特别要注意的是-128对于八位二进制没有原码(八位二进制原码范围是[-127,+127])和反码

)综上

  [1000 0000]补——[1000 0001]补——[1111 1111]补——[0000 0000]补——[0000 0001]补——[0111 1111]补

       -128                     -127                      -1                           0                          +1                        +127 

可以把这个想象成一个循环-128的下一个数又变成了+127,就像钟表一样。










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值