int8

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了int8相关的知识,希望对你有一定的参考价值。

有符号int8的范围(-128-127)

可-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

以上是关于int8的主要内容,如果未能解决你的问题,请参考以下文章

int32、int、int32_t、int8和int8_t的区别

swift3.0 无法将类型“[UnsafeMutablePointer<Int8>]”的值转换为预期的参数类型“UnsafeMutablePointer<Int8>?”

将 C 字符数组转换为字符串

typedef char int8; 这样定义的好处?

matlab数据类型转换——int8转换成unit8

Postgres - 将 dateString 转换为 int8