[王道-计算机组成原理笔记]第2章 数据的表示和运算

王道P28
以下部分笔记参考了其他博主的内容,已经注明出处和链接

第2章 数据的表示和运算

原码、补码、反码、移码

二进制减法运算






快速方法只有负数才能用,正数不变

反码末尾 + 1 = 补码

补码 + mod(模,周期) = 移码 ,可以用来比较数字大小
移码是真值加模后的值,不是原码加模,图片写错了

【计算机组成原理】原码 反码 补码 移码

一、原码、反码、补码、移码的概念

1. 真值

二进制数和十进制数一样有正负之分。书写时可以用"+“和”-"来表示数据的符号,这种书写格式称为真值。

例如:十进制的+3和-5,二进制的+011和-101都是真值。

2. 机器数

由于数据只有正、负两种符号,因此在计算机中很自然就采用二进制的0和1来表示数据的符号,由符号和数值一起编码表示的二进制数称为机器数或机器码。常用的机器数有原码、反码、补码和移码。

例如:(这里的机器数都是原码)1,0001第一位表示符号位,1表示负数,逗号将符号位和数值位区分开,逗号后面的是数值位,0001是二进制,所以转换为十进制后,真值就是 -1;再比如 0,101表示的十进制数的真值是+5。

1. 原码

原码就是符号化的数值,其编码规则简单直观:正数符号位用0表示,负数符号位用1表示,数值位保持不变。

例如:
x=+0.1101,则[x]原=0.1101;x=+1101,则[x]原=01101
x= -0.1111,则[x]原=1.1111; x= -1111,则[x]原=11111

原码数据表示简单直观,只需将符号位加上二进制数的绝对值即可。但原码存在两个机器0,这会给数据运算带来麻烦。另外原码的加减法运算复杂,符号位不能直接参与运算。加法运算需要“同号求和,异号求差”,减法运算需要“一号求和,同好求差”,求差时还需要先比较大小,然后用大数减去小数,最后结果的符号选择也相对复杂。显然,利用原码作为机器数在实现加减法运算方面是不方便的,原码在计算机中目前仅仅用于表示浮点数的尾码。

2. 反码

反码又称1的补码,其符号位和原码相同,真值为正数时,反码和原码相同;真值为负数时,反码数值位为真值数值位取反。

例如:
x=+0.1101,则[x]反=0.1101;x=+1101,则[x]反=01101
x= -0.1111,则[x]反=1.0000;x= -1111,则[x]反=10000

反码的符号位和原码相同,当真值为负数时,数值位需要逐位取反。同样反码也存在+0和-0两个0.反码的加减运算较原码略简单,其符号位可以直接参与运算,加法运算直接将反码相加即可,但最高位进位要从运算结果最低位相加(循环进位)。减法运算只需要将被减数的反码加上减数负数的反码即可,同样也要采用循环进位的运算方法。但尽管如此,现代计算机中并没有采用反码进行数据表示和运算,这是因为人们找到了更好的编码——补码。

3. 补码

计算机中的二进制数据都有字长的限制,数据最高位进位的位权值就是模数,运算结果超过模数的部分都会被自动舍弃,所以计算机二进制数据的运算属于典型的有模运算,非常适合采用补码进行表示和运算。

例如:
x=+0.0101,则[x]补=0.0101;
x= -0.0101,则[x]补=1.1011;
x= -0.0000,则[x]补=0.0000;
x= -1.0000,则[x]补=1.0000;

补码的表示相对原码更加复杂,但其只有唯一的0,符号位可以直接参与运算,运算时符号位的进位作为模会自动舍弃,其独特的表示方法使得减法运算可以转换成加法运算,大大方便了二进制的运算。目前计算机中普遍采用补码表示有符号整数。

4. 移码

移码只用于定点整数的表示,通常用于表示浮点数的阶码。其编码方式是直接将真值x加一个常数偏移量。

例如:
x=+1010110,则[x]移=11010110;
x= -1010110,则[x]移=00101010;

移码具有以下特点:
① 移码的符号位中0表示负数,1表示正数;
② 同一数值的移码和补码除符号位相反外,其他各位相同;
③ 移码中0的表示也唯一,具体表示为100000……。

二、原码、反码、补码、移码的转换

1. 原码转反码

当原码的真值为正数时,反码的机器数就等于原码的机器数

当原码的真值为负数时,反码的机器数等于原码的机器数取反(符号位不变)

例如:
x=+0.1101,则[x]反=0.1101;x=+1101,则[x]反=01101
x= -0.1111,则[x]反=1.0000;x= -1111,则[x]反=10000

2. 原码转补码 (补转原)

当原码的真值为正数时,补码的机器数就等于原码的机器数

当原码的真值为负数时,补码的机器数等于原码的机器数取反再加1(符号位不变)

补码转换为原码:符号位不变,数值位按位取反,末位再加1,即补码的补码等于原码。

例如:
x=+0.0101,则[x]补=0.0101;
x= -0.0101,则[x]补=1.1011;
x= -0.0000,则[x]补=0.0000;
x= -1.0000,则[x]补=1.0000;

简单来说,原码的反码加1就是补码

3. 原码转移码

当原码的真值为正数时,移码的机器数等于原码,但是符号位要改变

当原码的真值为负数时,移码的机器数等于原码机器数取反加1(符号位取反)

例如:
x=+1010110,则[x]移=11010110;
x= -1010110,则[x]移=00101010;

简单来说,原码的补码数值位不变,符号位取反就是移码

三、总结

① 原码、反码、补码、移码都是机器数的表示方法,其实转换为人类所理解的数(真值)都是一样的,但是人类的习惯性思维对反码、补码、移码理解比较困难,一般我们需要将它转换为原码再转换成十进制理解。

例如:1,00010(1表示符号位,00010表示数值位)是一个机器数的补码,我们想知道它的真值,需要先将其转换为原码,它的原码为1,11110,符号位为1,说明它是个负数,数值位为11110,是二进制,转换为十进制是30,所以该机器数的真值是-30。

② 当真值为正数时,反码、补码都等于原码,移码数值位等于原码,符号位取反即可。

③ 原码、反码机器数表示的零有正负之分;补码、移码机器数表示的零只有一个(即正零和负零相等)。

计算机中的逻辑运算(与、或、非、异或、同或、与非、或非)

计算机中的逻辑运算又被称作为“布尔运算”,分别为:逻辑与运算、逻辑或运算,逻辑非运算,“逻辑异或运算。此外在门电路中还有:同或运算、与非运算、或非运算。共七种。

这七种逻辑运算中,只有 逻辑非运算 是一元逻辑运算(一个运算操作数),其他六种均是二元逻辑运算(两个运算操作数)。

逻辑运算只有两个布尔值:

  • 0 ,表示假值(False)。
  • 1 ,表示真值(True)。

1. 与(AND)

逻辑与运算,运算规则:全一为一,有零为零。即只有两个操作数都为1时,结果才为1,其他情况均为0(也可以说,只要有0,结果就为0)。

操作数1操作数2结果值
111
100
010
000

2. 或(OR)

逻辑或运算,运算规则:全零为零,有一为一。即只有两个操作数都为0时,结果才为0,其他情况均为1(也可以说,只要有1,结果就为1)。

操作数1操作数2结果值
111
101
011
000

3. 非(NOT)

逻辑非运算,仅有一个运算操作数,所以是一元逻辑运算。
运算规则:一变零,零变一。即操作数为1时结果为0,操作数为0时结果为1。

操作数结果值
10
01

4. 异或(XOR)

逻辑异或运算,运算规则:相异为一,相同为零。即两个操作数不一样时结果为1,两个操作数相同时结果为0。

操作数1操作数2结果值
110
101
011
000

5. 同或(XNOR)

逻辑同或运算,运算规则:相同为一,相异为零。与异或运算规则相反。即两个操作数值相同时结果为1,两个操作数不一样时结果为0。

操作数1操作数2结果值
111
100
010
001

6. 与非(NAND)

逻辑与非运算,运算规则:先与后非(全一为零,有零为一)。也就是将两个操作数先进行“逻辑与运算”,对与“运算结果值”再进行“逻辑非运算”,产生最终的结果。

操作数1操作数2与运算结果值最终结果值
1110
1001
0101
0001

7. 或非(NOR)

逻辑或非运算,运算规则:先或后非(全零为一,有一为零)。也就是将两个操作数先进行“逻辑或运算”,对“或运算结果值”再进行“逻辑非运算”,产生最终的结果。

操作数1操作数2与运算结果值最终结果值
1110
1010
0110
0001

王道P41 原码一位乘法 B站:原码乘法运算 一位乘 计组

王道B站视频

进位计数制

BCD码


无符号整数的表示和运算

带符号整数的表示和运算——原反补

原反补码的特性对比

移码



定点小数



电路的基本原理、加法器设计






标志位的生成


定点数的移位运算





原码的乘法运算

补码的乘法运算


原码的除法运算



补码的除法运算


浮点数的表示





IEEE 754






浮点数的运算




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

BlackSheep_blog

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

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

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

打赏作者

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

抵扣说明:

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

余额充值