手把手教你数制运算,确定不来看看?

 前言



1、原码、反码、补码

开始之前不得不讲原码、反码、补码。那么什么是原反补码呢?

  1. 原码是数直接转换为二进制后所得的二进制序列。
  2. 反码是将原码的符号位不变,其他位依次按位取反。
  3. 补码是反码+1。

要注意的是,最高位是符号位,符号位0表示正数,1表示负数。

还需注意的是: 

了解了这些,我们就可以开始练习原反补的转换了。

 [题1.10]

写出下列二进制数的原码、反码和补码。

(1)\left (+1011 \right )_{2};(2)\left (+00110 \right )_{2};(3)\left (-1101 \right )_{2};(4)\left (-00101 \right )_{2}

题目分析

因为原反补码是带符号的,用0、1表示正负,而题目中的符号用+、-表示,所以需要将其用0、1代替。正数的原反补一样,负数的原反补遵循上述规律。

 [题1.11]

写出下列带符号位二进制数(最高位为符号位)的反码和补码。

(1)\left (011011 \right )_{2};(2)\left (001010 \right )_{2};(3)\left (111011 \right )_{2};(4)\left (101010 \right )_{2}

题目分析

题中“带符号位的二进制数”说明最高位是符号位,转反码补码时符号位是不能变的。正数的原反补都是本身。

 [题1.12]

用八位的二进制数补码表示下列十进制数。

(1)+17;(2)+28;(3)-13;(4)-47;(5)-89;(6)-121;

 题目解析

其他进制用补码表示,一定先将其转换为二进制序列,并且最高位是符号位,然后进行相应的变换。正数的原反补一样。

那会了从原码到补码,从补码到原码又该如何做呢?

正数也就不说了,负数如下。

 所以我们只需要记住先取反,再加1就好了。

2、多位二进制表示原码、反码、补码 

这里主要涉及到了C语言中的数据存储,比如用一个int类型的存储一个10,我们知道一个int类型的数据占了4个字节,一个字节又有8个bit位,所以一个int型数据共有32位。然而10用二进制表示为1010,加上符号位为0 1010,这么看来只要用到5位就可以表示,那么就会有27个bit位空着,但是表示数据又是用的32位,所以需要补位。如何补位呢?

其实很简单,我们只要在符号位和数据之间无用的全弄成0就好了。

比如10在int类型里面的位数为32位,表示出来就是0 000 0000 0000 0000 0000 0000 0000 1010,正数的原反补都是它。

又比如-10,int类型原码就是1 000 0000 0000 0000 0000 0000 0000 1010,反码就是1 111 1111 1111 1111 1111 1111 1111 0101 ,补码为1 111 1111 1111 1111 1111 1111 1111 0110.

而且我们要注意的是,计算机里面存储的是补码,存储补码便于数据的运算。比如减法运算我们可以看成加法运算,乘法可以看作若干次的“被除数(或0)左移一位”和“被乘数(或0)与部分积相加”这两种操作完成;而二进制数的除法运算能通过若干次的“除数右移1位”和“被除数或余数中减去除数”这两种操作完成。

如果我们再能够将减法操作转换为某种形式的加法操作,那么加减乘除运算就全部都可以用“位移”和“相加”两种操作实现了。利用上述特点能使运算电路的结构大为简化。这也是数字电路中普遍采用二进制算术运算的重要原因之一。

3、二进制算术运算

算术运算是加减乘除,对于二进制来说,我们重点掌握加减运算。

加减运算时,我们都是用补码进行运算,减法是将负号变成正。比如

变成补码后直接相加,符号位不管,也就是当成一个数进行运算。但是我们会发现:

 这时候就很难受,难道我们错了?

其实不是,还差了这一步:先算原码两数之和所有的位数是否足够表示。如果不估计,就是上面的效果,正数变成负数!!一定要注意这一步(本人就是这里困惑了好久[/奸笑])。具体可以看[题1.14][题1.15]

 [题1.13]

计算下列用补码表示的二进制数的代数和。如果和为负数,请求出负数的绝对值

(1)01001101+00100110;(2)00011101+01001100;(3)00110010+10000011;

(4)00011110+10011100;(5)11011101+01001011;(6)10011101+01100110;

(7)11100111+11011011;(8)11111001+10001000。

题目分析

首先根据题目"用补码表示的二进制数",可以知道这里的二进制数都是补码。所以计算结果首位是1的时候,需要计算其原码。题目“如果和为负数,求负数的绝对值”,也就是需要将负数的原码变为正数。二进制码的首位是区分负数与正数,所以只需将首位的1变为0即可将负数变为正数。因为二进制计算时我们直接用补码计算,所以这里我们不需要对它进行转换,直接进行计算。

 [题1.14]

用二进制补码运算计算下列各式。式中的4位二进制数是不带符号位的绝对值。如果和为负数,请求出负数的绝对值。(提示:所用补码的有效位数应足够表示代数和的最大绝对值。)

(1)1010+0011;(2)1101+1011;(3)1010-0011;(4)1101-1011;(5)0011-1010;(6)1011-1101;(7)-0011-1010;(8)-1101-1011.

题目解析

题目中“式中的4位二进制数是不带符号位的绝对值”说明这4位数是原码,最高位不是符号位。对于这种,我们可以将符号位加上去:加首位为0,减首位为1.最后变成最简单的加运算。然后得到带符号的原码,转换为补码(负数首位不变,其他按位取反后加1;正数原码与补码相同)。结束后如果为负数(首位为1),则除符号位其他按位取反后加1后算得原码,然后将首位变为0.当这两个数加起来后,位数超过4位,应进行补位,负数补码可以直接往前加1,正数补码可直接往前加0.

 [题1.15]

用二进制补码运算计算下列各式。(提示:所用补码的有效位数应足够表示代数和的绝对值的最大绝对值。)

(1)3+15;(2)8+11;(3)12-7;(4)23-11;(5)9-12;(6)20-25;(7)-12-5;(8)-16-14;

题目解析

题中“用二进制补码运算”,所以每个数都要换为二进制数。带有“-”的都看成负数进行运算。

所以总的来说,做运算的时候应该先估计最终结果转换为二进制数的位数,然后确定加数与被加数的位数,计算加数与被加数的补码然后直接相加。第一步是最重要的,一旦忽略,结果很有可能错。

千山万水总是情。转发点赞行不行?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值