二进制负数的补码为什么是符号位不变,其他位取反加一?

今天看了《逻辑设计基础》才明白了为什么二进制负数的补码是符号位不变,其他位取反加一

1. 什么是补码?

补码:计算机是用来将减法转换成加法的一种手段,在计算机系统中,数值一律用补码来表示和存储。

2. 如何求补码?

  • 如何求解一个补码,就要先涉及到的概念,那么什么是呢?

“模”是指一个计量系统的计数范围。比如说:对于 1 位十进制数字,它的范围是:0-9,那么它的模就是 10

模可以理解为当前空间所能表示的最大的数字再加一,再比如对于 3 位二进制数,它能表示的最大数字为 111,

那么它的模就是 1000,比它能表示的最大数字加一。

  • 那么对于补码又有什么作用呢?

首先强调一下,正数的补码=正数本身,负数的补码需要进行计算

  • 那么负数补码又和有什么关系呢?

负数的补码 = (-)【模 - (负数的绝对值) 】

这里的绝对值就是相当于忽略掉原来的数字符号,将负数当成它的相反数正数来计算,再将符号位填到结果前面

比如说:对于一个为 10 的 -2(原),它的补码就为 (-) 8 (补)

对于二进制数字来说,第一个位用来表示符号,0 表示正数,1 表示负数

那么对于带符号位的四位二进制来说:

0111(原) 的补码=0111(补)(因为 0 表示正数,正数的补码是它本身)

1001(原) 的补码=1111(补)(因为 1 表示负数,负数的补码=(-)【模-(负数的绝对值)】= (-)【1000-011】)

3. 那么跟你的标题有毛线的关系?

别着急,咱们慢慢来,标题上说的是:负数的二进制补码=符号位不变其它位取反加一

咱们先来看一个例子(就是上面的例子):对于四位二进制来说,第一个位表示符号,0表示正数,1表示负数

0111(原) 的补码 = 0111(补)

1001(原) 的补码 = 1111(补),我们尝试一下,全反加一的操作

1. 1 001(原)符号位不变,先取反得:1 110(反)

2. 再加一,1 110 + 1 = 1111(补)

4. 咦!真得上面的数欸,为什么取反加一就等于模减去负数的相反数呢,好神奇欸? 

嘿嘿,其实真滴是蛮神奇的,神奇就神奇在这是二进制!

先说个例子,对于三位二进制数:111 来说,它减去任何的三位二进制数都等于减去的三位二进制数的相反数!

真的这么神奇吗?

嘿嘿,我们来简单举个例子:111 - 101 = 010,010 是 101 的取反操作

111 - 010 = 101,101 是 010 的取反操作

哇哦,神奇吧,其实还行,1 - 1 = 0,1 - 0 = 1,这个就是里面的原理!

  • 你上面说的这个和 4.主题有什么关系呢?

这关系可大了!模是什么?模是能表示的最大数加一,那么对于任何N位二进制的数(不包含符号位),它的模是:2^N

那么它的最大值是多少呢?当然是 2^N - 1 啦,对于 3 位二进制数,它的模是 2^3 = 8,它的最大值是 2^3 - 1 = 7 也就是 111

  • 这下懂了吗?

计算 1 001 的补码就相当于先用 模-1 得到最大值 111,再用 111 - 001 = 110,再加上 1,就相当于用 模(1000) - 001 啦!

最后得到的 110,再补上符号位1,得 1110

5. 最后算两道题目

1111 + 0110 = ?

1011 + 1001 = ?

6. 突然又不明白负数的补码化成原码也是取反再加一了?

这其实和原码化成补码是一个道理!

咱们举个例子就懂了,对于模为10的一位十进制数字(不包含符号位),- 4(原),它的补码为 - 6(补)

补码如何计算的?负号先放一边,10 - 4 = 6,再加上负号得 -6(补)

那么从 -6(补)变回原码如何办?那也是相同的操作呀!将负号放一边,10 - 6 = 4,再加上负号得 -4

这样不就得到了 -6(补)的原码 -4(原)了呀!

其实聪明的读者已经想到了,这样有可能会导致溢出,正数加正数可能会出现负数,负数加负数可能会出现结果为正数!这又是怎么一回事呢?详情请看下回分解!

 

 

### 回答1: 对于一个 32 的定点整数表示,其中 1 表示符号,因此有 31 用于表示数值。 对于一个使用补码表示法的定点整数,最小负整数的表示方式是将符号设置为 1,其余各设置为 0,然后对其取补码。因此,最小负整数的表示方式为: 符号:1 数值:0...00(共计 30 个 0) 其中,数值共有 30 ,因为其中一用于表示符号。这个数的十进制表示为: -2^30 = -1,073,741,824 因此,最小负整数为 -1,073,741,824。 ### 回答2: 某机字长32,其中1表示符号。根据二进制补码表示法,这意味着有31用来表示数字部分,其中1表示正负。 对于定点整数表示法,最小负整数的表示方式为: - 首先,确定符号为负,即为1。 - 其次,确定数字部分。由于有31用来表示数字部分,所以最大能表示的数值范围为2的31次方,即(-(2^31)) ~ (2^31-1)。 - 最小负整数则为(-2^31)。 因此,某机字长32中,用定点整数表示,最小负整数为(-2^31)。 ### 回答3: 某机器的字长是32,其中1用来表示符号。因此,剩下的31可以用来表示整数的取值范围。 对于定点整数表示,最高符号用来表示正负,0代表正数,1代表负数。因此,除去符号后剩下的30来表示整数的范围。 对于30二进制数来说,最小的有符号整数是全部为1,也就是31个1的二进制数。由于符号为1,所以这个数是负数。 那么这个数的二进制表示为:1111 1111 1111 1111 1111 1111 1111 1111。 根据二进制转换成十进制的方法,将上述二进制数转为十进制数,即为最小的负整数。 计算得出,这个二进制数对应的十进制数为-2,147,483,647。 所以,对于这个32机器来说,用定点整数表示,最小的负整数为-2,147,483,647。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值