2的补码详解

2的补码详解_第1张图片

CPU里只有加法器并没有减法器。那么,计算机是如何进行减法运算的呢?被减数加上减数的补码即可,这个补码应该是2的补码(这里简称2补码)。

1.什么叫补码?

比如十进制数23的补码是多少?100-23=77。23的补码是77。355的补码呢?1000-355=645。以此类推。也就是说十进制数dec(n位)的补码为:10^n-dec。综上所述为10补码概念。

2补码是指什么呢?2^n-bin(二进制数)。比如8的二进制数为0000 1000(8位为例),2补码=2^8-0000 1000=1 0000 0000-0000 1000=1111 1000。也可以这么算:1 0000 0000=1111 1111+1。2^8-0000 1000=1111 1111-0000 1000+1。1111 1111-0000 1000=1111 0111,也就是0000 1000每位取反。那么,2补码简单求法为取反加一。

2.负数的表达方法

为什么用2补码来表达负数呢?咱们用容易理解的方式表达负数,看看会导致什么结果吧。-8不采用8的2补码,而用1000 1000来表达。最高位1表示负数。16-8=0001 0000+1000 1000=1001 1000(-24),结果不是8,而是-24,显然是错误的。这样的结果将导致CPU不仅需要加法器,还需要减法器。那么采用2补码方式结果会如何呢?16-8=0001 0000+1111 1000=1 0000 1000。由于是8位为例,第9位1将被舍弃,变为0000 1000(8),结果正确。所以,采用2补码的方式来表达负数的话无需减法器这类硬件。

3.8位(char)二进制数的数值范围

127(0111 1111):最大数

126(0111 1110)

1(0000 0001)

0(0000 0000)

-1(1111 1111)

-127(1000 0001)

-128(1000 0000):最小数

你可能感兴趣的:(C语言,加法器,2的补码,补码,算法)