快捷搜索:  汽车  科技

二进制对程序员重要吗?计算机凭啥用二进制

二进制对程序员重要吗?计算机凭啥用二进制比如苏美尔人使用十二进制,据说是通过大拇指点其他四根手指的指节得出的。当然,在人类文明发展的长河中,也诞生过一些其他的进制。在说这个问题之前,先解决另一个问题——为什么大多数国家的人类都采用十进制?因为,人类有十根手指。然后,没了。

计算机凭啥用二进制

不管是不是程序员,大家可能都知道二进制是个什么东西。

包括计算机在内,几乎所有电子设备都采用的二进制。

可是,为什么会这样呢?

二进制对程序员重要吗?计算机凭啥用二进制(1)

在说这个问题之前,先解决另一个问题——为什么大多数国家的人类都采用十进制?

二进制对程序员重要吗?计算机凭啥用二进制(2)

因为,人类有十根手指。

然后,没了。

二进制对程序员重要吗?计算机凭啥用二进制(3)


当然,在人类文明发展的长河中,也诞生过一些其他的进制。

比如苏美尔人使用十二进制,据说是通过大拇指点其他四根手指的指节得出的。

还有玛雅人的二十进制,大概率就是还算上了脚趾。

古巴比伦用六十进制,难道是五根手指搭配十二个指节?

二进制对程序员重要吗?计算机凭啥用二进制(4)

根据人类选择计数方法的进制,不难发现,人类总是根据身边最直接的物品来确定进制。

如果人类只有七根手指,那估计我们就该用七进制了。

二进制对程序员重要吗?计算机凭啥用二进制(5)

对人类如此,对机器也是如此。

人类有手,机器有开关。

开关只有“接通”和“断开”两种状态,正好跟“1”“0”对应。

于是,机器用二进制便成了天经地义的事情。

二进制对程序员重要吗?计算机凭啥用二进制(6)

仅仅是表示一个数据的话,二进制似乎只要增加位数就能做到。

但要命的来了。数字不光有正数和0的存在,还有负数。

二进制对程序员重要吗?计算机凭啥用二进制(7)

于是,人们就把最高位拿出来表示符号

正数用“0”,负数用“1”。

用这种方式表示的数字叫做机器数。也叫做原码

比如

3原码是0000 0011

-5原码是1000 0101

8bit原码数值范围为[1111 1111 0111 1111]即[-127 127],共255个数字。

二进制对程序员重要吗?计算机凭啥用二进制(8)

看起来似乎很方便,然而,当进行不同符号的加法或同符号减法运算的时候,麻烦来了。

原码的运算不能直接判断结果的正负,需要比较两个数值的绝对值,由绝对值大的值来决定符号。

比如

“ 3” “-5”

1000 0101绝对值0000 0101

0000 0011绝对值0000 0011

符号相反的加法即是绝对值的减法

所以结果的绝对值为0000 0010(2)

再看符号,1000 0101绝对值大于0000 0011

所以结果应该为1000 0010(-2)

所以“ 3” “-5”=“-2”

二进制对程序员重要吗?计算机凭啥用二进制(9)

很复杂对不对?

不光人觉得麻烦,机器也觉得麻烦。

于是,便有了反码。

那么,反码是什么呢?

正数的反码跟原码一致

负数的反码是将原码除符号位以外所有位取反

比如

3反码是0000 0011

-5反码是1111 1010

8bit反码数值范围为[1000 0000 0111 1111]即[-127 127] ,共255个数字。

二进制对程序员重要吗?计算机凭啥用二进制(10)

那,反码有什么好处呢?

同样,“ 3” “-5”

0000 0011 1111 1010 = 1111 1101(-2反码)

是不是简单多了?

但,还是有一个问题。这个问题是从原码遗留下来的。

无论原码还是反码,0有正负两种0

0000 0000(原码 0)

1000 0000(原码 -0)

0000 0000(反码 0)

1111 1111(反码 -0)

这个问题又该怎么解决呢?

于是,便终于有了补码。

二进制对程序员重要吗?计算机凭啥用二进制(11)

补码是这么表示的:

正数的补码依然是原码

负数的补码是将原码除符号位外各位取反,之后 1

也就是将反码 1

比如

3补码是0000 0011

-5补码是1111 1011

二进制对程序员重要吗?计算机凭啥用二进制(12)

虽然有点难理解,但是采用补码之后,不光解决了计算问题,还把正负零的问题规避了。

除了这两点,补码还能比原码和反码多表示一个数字。

8bit补码数值范围为[1000 0000 0111 1111]即[-128 127] ,共256个数字。

当“ 3” “-5”时

0000 0011 1111 1011 = 1111 1110(-2补码)

0只剩下了0000 0000这一种表示方法。

反码的1111 1111现在是补码中-1。

反码的1000 0000(-127)也就成了补码可以多表示的-128

二进制对程序员重要吗?计算机凭啥用二进制(13)

因此,在计算机系统中,数值一律用补码来表示和存储。

如今,计算机固然已经十分强大,但别忘记,是人类的智慧赋予的这一切。

猜您喜欢: