数的机器码表示【原码、反码、补码】笔记

前言:在本文章系列的开始,先自我介绍一下,本人计算机技术研一在读,本科通信工程。这个系列是自己写下来作为课堂笔记用的,希望在研一好好学一遍计算机的系统知识,CSDN使用方便,也可以分享出来,希望和各位一起探讨。水平有限,还请读者多多指正。

计算机使用二进制进行存储,因此衍生了一系列关于数据存储的问题,原码反码补码都是机器码,是计算机储存数据的格式,机器码是相对于真值而言,而真值可以理解为真实世界的数据。

首先
明确以下概念:
1.数的类型:整数、小数、实数、复数
2.数据的两种表示格式:定点格式、浮点格式

图源自笔者老师PPT(下同)

         移码的偏移值使用127,是因为省略了最高位1没有存储,实际是1.M代表整个尾数。

        这里顺带提一下所谓“机器零”的问题:机器“0”是指0以及0附近计算机无法表示的极小数(极小正数和极大负数,但都是0旁边的区域,即上图(b-a)。计算机将此类数默认为0.

原码      

        我们很容易将一个正数化为二进制数,无论是整数还是小数,如十进制3等于二进制11.
但如何记录负数呢?人类使用符号+-来表示正负,很容易想到机器可以使用01来表示。我们规定首位的数字表示符号,0表示+,1表示-,这样得到的原码就可以解决负数的存储问题。

        但实际存储时使用的却不是原码,而是补码,因为原码使得正负数相加的问题非常复杂,而补码使得加减操作的问题大大简化。具体可浏览:原码,反码,补码的深入理解与原理https://blog.csdn.net/afsvsv/article/details/94553228/https://blog.csdn.net/afsvsv/article/details/94553228/

反码

        正数的反码与原码相同,负数的反码即将除符号位的其余按位相反。反码有正负零如0000和1111皆表示0.

补码

        补码就是为了解决减法的问题,因为加法利于硬件实现,因此将减法转化为加法操作。利用“钟表”的思想,巧妙的解决了这一问题。具体参考上个链接,不再赘述。

模的概念可以帮助理解补数和补码。

“模”是指一个计量系统的计数范围。如时钟等。计算机也可以看成一个计量机器,它也有一个计量范围,即都存在一个“模”。例如:

时钟的计量范围是011,模=12。表示n位的计算机计量范围是02^(n)-1,模=2^(n)

“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。任何有模的计量器,均可化减法加法运算。

例如:假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法:一种是倒拨4小时,即:10-4=6;另一种是顺拨8小时:10+8=12+6=6

在以12模的系统中,加8和减4效果是一样的,因此凡是减4运算,都可以用加8来代替。对“模”而言,84互为补数。实际上以12模的系统中,111102937566都有这个特性。共同的特点是两者相加等于模。

对于计算机,其概念和方法完全一样。n位计算机,设n=8, 所能表示的最大数是11111111,若再加1称为100000000(9位),但因只有8位,最高位1自然丢失。又回了00000000,所以8二进制系统的模为2^8。在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以了。把补数用到计算机对数的处理上,就是补码。

补码运算的优点:(1)减法运算可以用加法来实现,即用求和来代替求差。

2)数的符号位可以同数值部分作为一个整体参与运算。

3)两数的补码之和(差)=两数和(差)的补码

1 )参加运算操作的数都用补码表示。 ( 2 )数据的符号与数据一样参加运算。

3 求差时将负减数求补,用求和代替求差, 将减法运算转化为补码的加法运算

4 )运算结果为补码。如果符号位为 0 ,表明运算结果为正;如果符号位为 1 ,则表明结果为负。

5 )符号位的进位为模值,应该去掉。 补码减法 运算公式为: [X]–[Y]=[X–Y](3.2)

    通过 [Y]补 求得 [–Y]补 可以将减法运算转化为补码的加法运算。

    已知 [Y]补求 [–Y]补 的法则是:对 [Y]补各位(包括符号位)取反,末位加1 ,就可以得到[–Y]

[Y]=1.1011 [–Y]=0.0101

   [Y]= 0.1011 [–Y]=1.0101

4 X=0.1100 Y=0.0110 [X]–[Y]=

: [X]=0·1100 [Y]=0·0110 [–Y]=1·1010

    [X]–[Y]=0.0110+1.1010=0.0000

        通常利用反码来求补码,更为简单。
        补码表示数的范围扩大,如1000为4位定点整数可表示的最小值-8(即-2^{3})。

         注意补码与真值的关系公式,减去的数是模值的二分之一。如小数是1,定点整数是2^{n}.

移码

        移码与补码符号位相反,尾数相同。移码相对容易理解,4位移码,0000表示最小值-8,0001表示-7,0010表示-6,,,1000表示0,1001表示1,,,1111表示7,可见移码与补码表示范围相同,且不会出现正负0的问题。对于IEEE754中阶码的表示,移码的偏置值不同,32位为127,64位为1023.但全0时仍表示最小值,即机器0.

         上面这个例题可以帮助理解负下溢、正下溢、机器0等问题。

 

上面这个例题需要理解,补码的符号位其实就是机器数的也就是最高位的符号位,尾数23位都是补码中的尾数。之所以要求负数的最高位为0,道理和正数的最高位为1是一样的,为了规格化。

以4位定点整数为例:
原码表示最小值1111=-7,最大值0111=+7
反码表示最小值1000=-7,最大值0111=+7,1111=0
补码表示最小值1000=-8,最大值0111=+7,1111=-1
移码表示最小值0000=-8,最大值1111=+7

注:本文部分图片引自白中英版计算机组成原理。

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 根据题目,机器字长为8位,因此需要用8位二进制表示这些字的不同表示。 1. -1的表示: - 原码:10000001 - 反码:11111110 - 补码:11111111 - 移码:10000000 2. -1011001的表示: - 原码:11101001 - 反码:10010110 - 补码:10010111 - 移码:11101000 3. 1011001的表示: - 原码:01011001 - 反码:01011001 - 补码:01011001 - 移码:01011001 其中,原码表示是最基本的二进制表示,正原码补码相同,而负原码最高位为1。反码是将原码中除符号位以外的位按位取反得到的。补码是将反码末位加1得到的,是计算机中负的标准表示方式。移码是将补码中所有位加上一个固定值得到的,在计算机中常用于浮点表示。 ### 回答2: -1的原码表示为:10000001 -1的反码表示为:11111110 -1的补码表示为:11111111 -1的移码表示为:01111111 -1011001的原码表示为:11010111 -1011001的反码表示为:10101000 -1011001的补码表示为:10101001 -1011001的移码表示为:00101001 1011001的原码表示为:1011001 1011001的反码表示为:1011001 1011001的补码表示为:1011001 1011001的移码表示为:0011001 设机器字长为8位,表示范围为-128 ~ 127。可以发现上述三个目前都是负,而负在计算机中是用补码表示的。所以需要将这三个原码转换为补码表示。 对于原码转换为补码的方法为: 如果原码的符号位为1(表示),则补码不变; 如果原码的符号位为0(表示),则补码等于原码。 对于补码转换为反码的方法为: 如果补码的符号位为1(表示),则反码等于补码除符号位外的位取反; 如果补码的符号位为0(表示),则反码等于补码。 对于补码转换为移码的方法为: 将补码的符号位取反得到移码。 因此,给出的三个补码和移码与原码是一样的。 ### 回答3: -1的8位原码表示为:10000001 -1的8位反码表示为:11111110 -1的8位补码表示为:11111111 -1的8位移码表示为:10000000 -1011001的8位原码表示为:11011001 -1011001的8位反码表示为:11100110 -1011001的8位补码表示为:11100111 -1011001的8位移码表示为:11111110 1011001的8位原码表示为:00110001 1011001的8位反码表示为:00110001 1011001的8位补码表示为:00110001 1011001的8位移码表示为:00110001 在8位的机器中,正原码反码补码和移码表示都相同。而负反码表示为对其原码除符号位外的每一位取反,补码表示为对其原码除符号位外的每一位取反,然后再加1。 移码表示是为了简化负的运算,将其转换成的在同等位上的正运算。移码的规则是对补码取反得到移码,正的移码与原码相同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

几分出发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值