为什么c语言负数是以补码形式存放的?

Python017

为什么c语言负数是以补码形式存放的?,第1张

计算机的硬件,只有加法器

负数、减法,都必须用加法来完成。

你看十进制:

24 - 1 = 23

24 + 99 = (一百) 23

舍弃进位,+99 可以当做-1 进行运算。

+99 就是-1 的补数。

补数(补码),就是一个“代替负数进行运算的正数”。

对于 2 位 10 进制数,求补数的公式:

补数=负数+10^2。

计算机中,用二进制,就称为补码。

对于 8 位 2 进制数,求补码的公式:

补码=负数+2^8。

-1 的补码是:-1 + 256 = 255 = 1111 1111。

-2 的补码是:-2 + 256 = 254 = 1111 1110。

。。。

-128 的补码是:128 = 1000 0000。

求补码,不要用“原码取反加一”。

那个方法,是无法求出-128 的补码的。

而且,你也不能理解补码的意义。

---------------------

为什么 C 语言负数是以补码形式存放的?

借助于补码,就统一了加减法,硬件就得以简化。

计算机中,只有加法器,没有减法器。

负数,必须转换成正数(即补码),用加法来计算。

你看十进制:

24 - 1 = 23

24 + 99 = (1)  23

舍弃进位,+99 就可以代替-1。

+99 就称为-1 的补数。

负数的补数= 负数+10^n, n 是位数。

二进制的补码,也是这样计算出来的。

负数的补码= 负数+2^n, n 是位数。

补码,与原码反码符号位,并无关系。

取反加一的理论,是不存在的。