2的补码详解

1 篇文章 0 订阅
0 篇文章 0 订阅

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):最小数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值