可-128是怎么来的
我们先得懂整型在计算机中是如何存储的?
数值 | 原码 | 反码 | 补码 |
---|---|---|---|
1 | 0 000 0001 | 0 000 0001 | 0 000 0001 |
正数的反码是本身,正数的补码是本身
数值 | 原码 | 反码 | 补码 |
---|---|---|---|
-1 | 1 000 0001 | 1-111- 1110 | 1 -111 -1111 |
负数的反码是除符号位,按位取反
负数的补码是 反码+1
这样的设计为了什么?
我们接下来,扩展一下,就是整型的加减操作是如何做的?
-1 + 1 = 0
俩者的原码相加 -2,显然不是
俩者的反码相加 -127,显然不是
俩者的补码相加 0, 这是巧合吗?并不是。这就解答了我们上边的问题。在计算机里,整型数据是以补码的形式存储,
引进补码的作用是为了让计算机更方便做减法
一个负数总有(在当前范围内)一个整数与之相对应
那他们之间的关系是什么呢?我们想快速的知道它是谁?
我们 设y为那个神秘数字, x 为那个负数。bits 为范围位数,int8,bits = 8
(2 ^ 8) + x = y
x = -1 那 y = 255
255在计算机怎么表现 1111-1111
他是一个超界限的值,只用于理解一个负数怎样存储
回到最终问题,-128怎么来的?
0000-0000 =》 0111-1111 一共128个
1000-0001 =》 1111-1111 一共127个
那是不是缺一个-128,那-128怎么表示呢?
其实-128 就是这样表示的 1000-0000,这不是-0吗?
如果有人问你,有符号int8 ,1000-0000 是多少?告诉他,-128,
你可以理解为 它的符号位和数值位重合。
怎么证明呢?
-127 + (-1)就是 -128 符号位不参与运算
-127补码 | -1补码 | -128 |
---|---|---|
1000 0001 | 1111-1111 | 1000 0000 |
特殊的是,它的补码同源码,且不同于反码,它既不是整数又不是负数,那它是啥?发人深思,自己领会,其中奥妙,妙不可言。
数值 | 原码 | 反码 | 补码 |
---|---|---|---|
-128 | 1000 0000 | 1111-1111 | 1000 0000 |
原文地址:https://blog.51cto.com/rhino/2480627