真值原码反码补码详解和习 题
计算机中的原码、反码和补码
补码补码补码(two's complement) 1、在计算机系统中,数值一律用补码来表示(存储)。
主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。
另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
2、补码与原码的转换过程几乎是相同的。
补码概述求给定数值的补码表示分以下两种情况:(1)正数的补码与原码相同。
【例1】+9的补码是00001001。
(备注:这个+9的补码说的是用8位的2进制来表示补码的,补码表示方式很多,还有16位2进制补码表示形式,以及32位2进制补码表示形式等。
)(2)负数的补码负数的补码是对其原码逐位取反,但符号位除外;然后整个数加1。
同一个数字在不同的补码表示形式里头,是不同的。
比方说-15的补码,在8位2进制里头是11110001,然而在16位2进制补码表示的情况下,就成了1111111111110001。
在这篇补码概述里头涉及的补码转换默认了把一个数转换成8位2进制的补码形式,每一种补码表示形式都只能表示有限的数字。
【例2】求-7的补码。
因为给定数是负数,则符号位为“1”。
后七位:+7的原码(0000111)→按位取反(1111000)→加1(1111001)所以-7的补码是11111001。
已知一个数的补码,求原码的操作分两种情况:(1)如果补码的符号位为“0”,表示是一个正数,其原码就是补码。
(2)如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。
再举一个例子:求-64的补码+64:0100000011000000【例3】已知一个补码为11111001,则原码是10000111(-7)。
因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”。
其余七位1111001取反后为0000110;再加1,所以是10000111。
在“闲扯原码、反码、补码”文件中,没有提到一个很重要的概念“模”。
原码、反码、补码课件
160
二进制数相加
10000110 + 00011010
10100000
看成补码
-122
+
26
-96
出现问题
• 错误的结果:
11001011 10010001
01011100
-0110101 + -1101111
+1011100
-53 + -111
-+19624
思考:为什么出现了错误?
补码 • 溢出
补码 •补码的求法(1)
• 正数:与原码相同;
• 负数:“求反加一”
例:
x=+1001100B,则[x]补=01001100B=[x]原
x=-1001100B,则[x]补=10110100B
x=-1001100时, [x]补=28-1001100B
11111111 01001100
=256 -1001100B =255 -1001100B +1
溢出
图d 有进无出
补码 • 溢出的判别(3)
• 课堂练习
1、请判断下列8位补码的运算是否会产生溢出?
11001001 11100111
10110000
有进有出,无溢出
01100011 01001010
10101101
有进无出,溢出
补码小结
真值 机器数
无符号数 有符号数
原码 反码
真值的方法 已知[x]补,求[-x]补的方法 溢出
• 拨针方法小结: 8- 2=6
8 + 10 = 6 • 思考:为什么会出现这种现象?计算机中是否
也有这种现象? (表盘是圆的,可循环计时。)
8086微型计算机原理与应用(吴宁)习题参考答案(第一章)
8086微型计算机原理与应用(吴宁)习题参考答案(第一章)第一章计算机基础知识1-3 写出下列机器数的真值(1)01101110 真值=+1101110B=+110(2)10001101 真值=-0001101B=-13(3)01011101 真值=+1011001B=+89(4)1100110 真值=-1001110B=-781-4 写出下列二进制数据的原码、反码和补码(设字长为8位)(1)+010111原码=反码=补码=00010111(2)+101011原码=反码=反码=00101011(3)-101000原码=10101000 反码=11010111 补码=11011000(4)-111111原码=10111111 反码=11000000 补码=110000011-5 写出等效的十进制数值:(1)[X]原=[X]反=[X]补= 0001110 真值X=+14(2)[X]原=11111111 真值X= -127[X]反= 11111111 真值X= -0[X]补= 11111111 真值X= -1(3)[X]原= 10000000 真值X=-0[X]反= 10000000 真值X=-127[X]补= 10000000 真值X=-128(4)[X]原=10000001 真值X= -1[X]反= 10000001 真值X=-126[X]补= 10000001 真值X= -1271-6 计算下列各式(1)00020200+00100001= 00110101(2)00010100+00100001=00110101(3)11101100+00100001=00001101(4)11101100+ 11011111=11001011(5)00010100+10111110=11010010(6)11101100+ 11111100=111010001-7用补码来完成下列计算,并判断有无溢出产生(字长8位)(1)85+6001010101+ 0011110010010001CS=0 CP=1 CS XOR CP=1 所以产生溢出OV=1(2)-85+60+0011110011100111CS=0 CP=0 CS XOR CP=0 无溢出(3)85-6001010101+110001001 00011001CS=1 CP=1 CS XOR CP=0 无溢出(4)-85-6010101011+ 110001001 01101111CS=1 CP=0 CS XOR CP=1 产生溢出1-8补码加法判断有无溢出(1)01001010+01100001 = 10101011 Cp=1,Cs=0 有溢出(2)01101100 —01010110=01101100+10101010=00010110Cp=1,Cs=1 无溢出1-9 转换BCD码(1)30D = (00110000)BCD (2)127D = (000100100111) BCD (3)00100010B=34D=(00110100) BCD (4)74H=116D=(000100010110) BCD 1-10 ASCⅡ码表示的字符41H =’A’ ; 71H=’r’ , 65H=’e’ , 20H=SP1-11 字符的ASCⅡ码‘9’= 39H , ‘*’= 2AH , ‘=’ = 3DH , ‘$’ = 24H , ‘ !’ = 21H1-12 加偶校验的字符的ASCⅡ码‘9’: 39H ; ‘*’:AAH ; ‘=’ : BDH‘$’ : 2DH ; ‘!’ : 21H1-13 补码表示的定点小数时,数值范围为-1 ——+(1- 2-9)补码表示的定点整数时,数值范围为-29 ——+ (—29–1)—补码表示阶码,原码表示尾数时,数值范围为-27 (1-2-5) ——+27 (1-2-5) 1-14试将下列数表示成浮点的规格化数。
补码
二、无符号数与有符号数
• 无符号数:
– 全部二进制均代表数值,没有符号位。
• 有符号数:
– 用最高位作为符号位,“0”代表“+”,“1”代 表“-”;其余数位用作数值位,代表数值。 – 如: +35 化为有符号机器数
转换为 二进制 +35 +100011B 化成有 符号数 0100011
8位 16位
看成无符号数 134 26 160 二进制数相加 10000110 00011010 10100000 看成补码 -122 26 -96
+
+
+
出现问题
• 错误的结果:
11001011 10010001 01011100
-0110101 + -1101111 +1011100
-53 + -111 +92 -164
思考:为什么出现了错误? 思考:为什么出现了错误?
补码 • 溢出
• 刚才出现的问题叫做“溢出 溢出”; 溢出 • 溢出的原因:运算结果超出了可表示的有 符号数的范围。 • 溢出只会出现在两个同号数相加或两个异 号数相减的情况下。
思考:如何判别溢出与正常进位? 思考:如何判别溢出与正常进位?
补码 • 溢出的判别(1) 溢出的判别(1)
n位 …… 模的思路(
• 观察钟表拨针的两种方法: 8- 2=6 8 + 10 = 6 我们可以看出,减去一个数 a 相当于加上(模 -a)一样,而在计算机中也有相同情况。 • 在8位字长的计算机中,减去一个数a相当于加 上(28-a)一样。 • 我们称(28-a)为a的补数,其二进制表示形式 称为补码 补码。 补码
• 拨针方法小结: 8- 2=6 8 + 10 = 6 • 思考 思考:为什么会出现这种现象?计算机中是否 也有这种现象? (表盘是圆的,可循环计时。)
原码、反码、补码详解!不懂的请看过来!(转)
原码、反码、补码详解!不懂的请看过来!(转)本篇⽂章讲解了计算机的原码、反码和补码,并且进⾏了深⼊探求了为何要使⽤反码和补码,以及更进⼀步的论证了为何可以⽤反码、补码的加法去计算原码的减法。
论证部分如有不对的地⽅请各位⽜⼈帮忙指正!希望本⽂对⼤家学习计算机基础有所帮助!⼀. 机器数和机器数的真值在学习原码,反码和补码之前,需要先了解机器数和真值的概念。
1、机器数⼀个数在计算机中的⼆进制表⽰形式,叫做这个数的机器数。
机器数是带符号的,在计算机⽤机器数的最⾼位存放符号,正数为0,负数为1。
⽐如,⼗进制中的数 +3 ,计算机字长为8位,转换成⼆进制就是0000 0011。
如果是 -3 ,就是 100 00011 。
那么,这⾥的 0000 0011 和 1000 0011 就是机器数。
2、机器数的真值因为第⼀位是符号位,所以机器数的形式值就不等于真正的数值。
例如上⾯的有符号数 1000 0011,其最⾼位1代表负,其真正数值是 -3,⽽不是形式值131(1000 0011转换成⼗进制等于131)。
所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。
例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1⼆. 原码, 反码, 补码的基础概念和计算⽅法在探求为何机器要使⽤补码之前,让我们先了解原码、反码和补码的概念。
对于⼀个数,计算机要使⽤⼀定的编码⽅式进⾏存储,原码、反码、补码是机器存储⼀个具体数字的编码⽅式。
1. 原码原码就是符号位加上真值的绝对值,即⽤第⼀位表⽰符号,其余位表⽰值。
⽐如:如果是8位⼆进制:[+1]原= 0000 0001[-1]原= 1000 0001第⼀位是符号位,因为第⼀位是符号位,所以8位⼆进制数的取值范围就是:(即第⼀位不表⽰值,只表⽰正负。
)[1111 1111 , 0111 1111]即[-127 , 127]原码是⼈脑最容易理解和计算的表⽰⽅式。
原码、反码、补码
[X-Y]补=[X]补+ [-Y]补 =11101011+10110110
=
[-Y]补=10110110
练习 已知X=-1101001B,Y=-1111011B,求[X+Y]补
定点加/减法运算(补码)
练习 已知X=-1101001B,Y=-1111011B,求[X+Y]补
例:已知X=-1101001B,Y=-1011011B,用补码求X+Y的值
[Y]反=01001010 [Y]补=01001010
[X+Y]补= [X]补+ [Y]补 =11101011+01001010
=
[X-Y]补=[X]补+[-Y]补
[X]原=10010101 [X]反=11101010 [X]补=11101011
[Y]反=01001010 [Y]补=01001010
[X]补+[Y]补=[X+Y]补
[X]原=11101001 [X]反=10010110 [X]补=10010111
[Y]原=11011011 [Y]反=10100100 [Y]补=10100101
Cs+1Cs=10,下溢 Cs+1Cs=01,上溢 Cs+1Cs=00或11,无溢出
[X]补+[Y]补=10010111+10100101 X+Y发生了溢出(下溢)
x
+1001001 -1100100
[x]原
01001001 11100100
原码特点
原码符号位 后的代码为 真值的绝对 值
+0的原码 为 00000000
-0的原码为 10000000
原码的表示 范围为+ (2n-1-1) ~-(2n-1-1)
原反补码转换练习题及答案
原反补码转换练习题及答案一、选择题1. 假设一个有符号的8位二进制数,其原码表示为10001000,其反码和补码分别是什么?A. 10001000 10001111B. 11110111 11111000C. 11110111 11110110D. 10001000 100011112. 以下哪个二进制数的补码表示是10000000?A. 10000000B. 01111111C. 10000001D. 011111113. 将十进制数-27转换为8位二进制数的补码表示,结果是什么?A. 11100011B. 11100010C. 11100001D. 111000004. 如果一个8位二进制数的反码是10000001,那么它的原码表示的十进制数是多少?A. -127B. -1C. 127D. 15. 8位二进制数的补码表示为11111110,其对应的原码表示的十进制数是多少?A. -1B. -2C. 254D. 255二、填空题6. 将十进制数-15转换为8位二进制数的原码表示为______。
7. 如果一个8位二进制数的原码表示为10001011,那么它的反码表示为______。
8. 补码表示的二进制数10000000在十进制中表示的数值为______。
9. 8位二进制数的补码表示为11111111,其对应的反码表示为______。
10. 将十进制数-128转换为8位二进制数的补码表示,结果为______。
三、简答题11. 描述如何将一个8位二进制数的原码转换为补码。
12. 解释为什么8位二进制数的补码表示中,最大的正数和最小的负数的补码是相同的。
四、计算题13. 将十进制数-35转换为8位二进制数的原码、反码和补码,并说明转换过程。
14. 假设有两个8位二进制数,原码分别为01101100和10001101,计算它们的反码和补码,并说明它们在十进制中分别表示的数值。
答案:1. B2. B3. A4. A5. B6. 111101117. 111101018. -1289. 1111111010. 1000000011. 将8位二进制数的原码中的最高位(符号位)保持不变,其余位取反,得到反码。
真值原码逆补的详细讲解和练习.doc
真值原码逆补的详细讲解和练习原始码、逆码和补码的概念本节要求掌握原始码、逆码和补码的概念。
根据小数点处理方式,数字数据的表示可分为定点数和浮点数。
根据符号位,有三种机器号码:原始码、反码和补码。
一、计算机中的数据表示1.数字的定点数和浮点数在计算机内部表示。
通常,带小数点的数字有两种表达方式,即所谓的定点数和浮点数。
(1)固定点:但是,小数点在数字中的位置是固定的。
数字的最高位是符号位。
小数点可以在符号数字之后,也可以在数字的末尾。
小数点本身不需要表达。
这是隐含的。
缺点:只有纯小数或整数可以用定点表示;(2)浮点数:小数点在数字中的位置是浮动的,不是固定的。
通用浮点数既有整数部分也有小数部分。
通常,对于任何二进制数N,它可以表示为:N=2p× s n,p,s是二进制数,p是n的顺序码,通常是一个定点整数。
订单代码指示数据中小数点的位置。
它确定浮点表示范围s的尾数,通常是定点小数,通常用补码或原始代码表示。
尾数部分给出浮点数的有效位数,决定浮点数的精度,归一化后的浮点数为0.5 ≤| s | 1;0.1B=( 1/2 )D=( 2-根据符号位具有原始代码、反码和补码的机器数量。
一、计算机中的数据表示1.数字的定点数和浮点数在计算机内部表示。
通常,带小数点的数字有两种表达方式,即所谓的定点数和浮点数。
(1)固定点:但是,小数点在数字中的位置是固定的。
数字的最高位是符号位。
小数点可以在符号数字之后,也可以在数字的末尾。
小数点本身不需要表达。
这是隐含的。
缺点:只有纯小数或整数可以用定点表示;(2)浮点数:小数点在数字中的位置是浮动的,不是固定的。
通用浮点数既有整数部分也有小数部分。
通常,对于任何二进制数N,它可以表示为:N=2p× s n,p,s是二进制数,p是n的顺序码,通常是一个定点整数。
订单代码指示数据中小数点的位置。
它确定浮点表示范围s的尾数,通常是定点小数,通常用补码或原始代码表示。
原码反码补码测试题及答案
测试题1 、无符号二进制数1100 1000 所表示的十进制数为。
A .104 B. 148 C. 172 D . 2002 、有符号二进制数1100 1000 所表示的十进制数为。
A . -200 B. -72 C. 72 D . 2003 、用16 位和8 位机器码分别写出十进制数+58 和—58 的原码、反码和补码。
4 、若用8 位机器码表示十进制数- 101 ,则原码表示的形式为(1);补码表示的形式为(2)。
(1)A.1110 0101 B.1001 1011 C.1101 0101 D.1110 0111(2)A.1110 0101 B.1001 1011 C.1101 0101 D.1110 01115 、已知一个字长为8 的整数的原码是10011010 ,求它的补码。
6 、已知一个字长为8 的整数的补码是10011000 ,求它的原码。
7、在字长为16 位的系统环境下,一个16 位带符号整数的二进制补码为1111 1111 1110 1101。
其对应的十进制整数应该是()。
A .19B .- 19C .18D .- 188 、一个字长为8 位的整数的补码是11111001 ,则它的原码是()。
A .0000 0111B .0111 1001C .1111 1001D .1000 01119 、在整数的补码表示法中,以下说法正确的是()。
A .只有负整数的编码最高位为1B .在编码的位数确定后,所能表示的最小整数和最大整数的绝对值相同C .整数0 只有一个唯一的编码D .两个用补码表示的数相加时,如果在最高位产生进位,则表示运算溢出参考答案:1 、D2 、B3 、+58 ,16 位原码:0000 0000 0011 1010反码:0000 0000 0011 1010补码:0000 0000 0011 1010+58 ,8 位原码:0011 1010 反码:0011 1010 补码:0011 1010 -58 ,16 位原码:1000 0000 0011 1010反码:1111 1111 1100 0101补码:1111 1111 1100 0110-58 ,8 位原码:1011 1010 反码:1100 0101 补码:1100 01104 、(1) A (2) B5 、1110 01106 、1110 10007 B 8 D 9AC。
计算机组成原理习题答案第二章
6.设[X]原=1.a1a2a3a4a5a6,
(1)若要X>-1/2
,a1~a6要满足什么条件?
(2)若要-1/8
≥X≥-1/4
,a1~a6要满足什么条件?
解:(1)X>-1/2
的代码为:
1.000001-1
64
…
1.011111-3/1
64
a1=0,a2+a3+a4+a5+a6=1。
(2)-1/8
解:无符号整数:0≤X≤(232-1)。
补码:-231≤X≤(231-1)。
11.某浮点数字长12位,其中阶符1位,阶码数值3位,数符1位,尾数数值7位,阶码以2为底,阶码和尾数均用补码表示。它所能表示的最大正数是多少?最小规格化正数是多少?绝对值最大的负数是多少?
解:最大正数=(1-2-7)×223-1=(1-2-7)×27=127。
20.以下列形式表示(5382)10。
(1)8421码; (2)余3码;
(3)2421码; (4)二进制数。
解:(1)0101001110000010。
(2)1000011010110101。
(3)1011001111100010。
(4)1010100000110。
21.填写下列代码的奇偶校验位,现设为奇校验:
0.10000001.1000000
0.1111000
1.1111000
00001101
10001101
00000000
00000000
0.10000001.1000000
0.1111000
1.0001000
00001101
11110011
00000000
11111111
原码反码补码例题详解
以下是一个原码、反码和补码的例题及其详细解答:
题目:已知一个负整数X=-1101(二进制),求其原码、反码和补码。
解答:
1. 原码:原码就是符号位加上真值的绝对值。
由于X是负数,其符号位为1。
真值的绝对值为1101(二进制)。
所以,X的原码为11101(二进制)。
2. 反码:对于正数,反码就是其本身;对于负数,反码是在其原码的基础上,将所有1变为0,0变为1。
因此,X的反码为00011(二进制)。
3. 补码:对于正数,补码就是其本身;对于负数,补码是在其反码的基础上加1。
因此,X的补码为00100(二进制)。
总结:
* 原码表示的是符号位和真值的绝对值。
* 反码是在原码的基础上进行位反转。
* 补码是在反码的基础上加1。
需要注意的是,补码在计算机中通常用于存储数字,因为计算机内部只能处理二进制数据。
在计算机中,正数的补码就是其本身,负数的补码是其反码加1的结果。
原码补码反码
2.1
练习 求下列真值的补码
真值
[x]补
[x]原
0,1000110 1,1000110 0.1110 1.1110 0.0000 1.0000
不能表示
x = + 70 = 1000110 0, 1000110 1, 0111010 x = –70 = – 1000110 x = 0.1110 0.1110 1.0010 x = 0.1110 x = 0.0000 [+ 0]补 = [ 0]补 0.0000 x = 0.0000 0.0000 x = 1.0000 1.0000 由小数补码定义
[x]补 = x 2+ x
1>x≥0 0 > x ≥ –1(mod 2)
[ 1]补 = 2 + x = 10.0000 1.0000 = 1.0000
2.1
六、反码表示法
1. 定义
整数 0, x [x]反 = n+1 ( 2 – 1) + x
x 为真值
2n > x ≥ 0 0 ≥ x > 2 (mod 2
<Ⅰ > [y]补 = 0. y1 y2 … yn yn y = 0. y1 y2 … 每位取反, [y]补连同符号位在内, 末位加 1
即得[ y] y补=
0. y1 y2 … yn [ y]补 = 1.y1 y2 … yn + 2-n [y]补 = 1. y1 y2 … yn [ y]原 = 1.y1 y2 …yn + 2-n
x = + 0.1000000 x= 0.1000000
2.1
设 x = +0.0000 y = 0.0000
同理,对于整数
则[x]原 = 0.0000 则[y]原 = 1.0000 [+ 0]原 = 0,0000 [ 0]原 = 1,0000
第六章 习题解答.
(1)[x2]浮=1,0101;1.110 110 000 0 (2)[x2]浮=1,1011;1.001 010 000 0 (3)[x2]浮=0,1011;1.001 010 000 0 (1)[x3]浮=0,0011;0.111 011 000 0 (2)[x3]浮=0,0011;0.111 011 000 0 (3)[x3]浮=1,0011;0.111 011 000 0 (1)[x4]浮=0,0111;1.101 011 010 0 (2)[x4]浮=0,0111;1.010 100 110 0 (3)[x4]浮=1,0111;1.010 100 110 0 注:以上浮点数也可采用如下格式:
原 码 反 码 1.001 1010 1.110 0101 0.001 1101 0.001 1101 0,110 0100 0,110 0100 1,101 0111 1,010 1000
补 码 1.110 0110 0.001 1101 0,110 0100 1,010 1001
5. 已知[x]补,求[x]原和x。 [x1]补=1. 1100; [x2]补=1. 1001; [x3]补=0. 1110; [x4]补=1. 0000; [x5]补=1,0101; [x6]补=1,1100; [x7]补=0,0111; [x8]补=1, 0000; 解:[x]补与[x]原、x的对应关系如下:
第六章 习题解答
4. 设机器数字长为8位(含1位符号位在 内),写出对应下列各真值的原码、补码和 反码。 -13/64,29/128,100,-87 解:真值与不同机器码对应关系如下:
真
十进制
值
二进制
-13/64 29/128 100 -87
-0.00 1101 0.001 1101 110 0100 -101 0111
原码反码及补码(师用)
原码、反码和补码的概念本节要求掌握原码、反码、补码的概念知识精讲数值型数据的表示按小数点的处理可分为定点数和浮点数;按符号位有原码、反码和补码三种形式的机器数。
一.计算机中数据的表示方法1、数的定点与浮点表示在计算机内部,通常用两种方法来表示带小数点的数,即所谓的定点数和浮点数。
①定点数:是小数点在数中的位置是固定不变的数,数的最高位为符号位,小数点可在符号位之后,也可在数的末尾,小数点本身不需要表示出来,它是隐含的。
缺点:只有纯小数或整数才能用定点数表示;②浮点数:小数点在数中的位置是浮动的、不固定的数。
一般浮点数既有整数部分又有小数部分,通常对于任何一个二进行制数N,总可以表示成:N=±2P×SN、P、S均为二进制数,P为N的阶码,一般为定点整数,常用补码表示,阶码指明小数点在数据中的位置,它决定浮点的表示范围;S称为浮点数N的尾数,一般为定点小数,常用补码或原码表示,尾数部分给出了浮点数的有效数字位数,它决定了浮点数的精度,且规格化浮点数0.5≤|S|<1;在计算机中表示一个浮点数其结构为:假设用八个二进制位来表示一个浮点数,且阶码部分占4位,其中阶符占一位;尾数部分占4位,尾符也占一位。
若现有一个二进制数110一个浮点形式的尾数S0,则该浮点数称为规格化数;规格化数可以提高运算的精度。
S为原码表示,则S1=1规格化数S为补码表示N为正数,则S1 =1N为负数,则S1=0二、原码、反码和补码1、机器数与真值真值:用“+”、“—”号表示的二进制数。
机器数:在计算机中数据和符号全部数字化,最高位为符号位,且用0表示正、1表示负,那么把包括符号在内的一个二进制数我们称为机器数。
如:将真值+11101B表示成机器数为011101B,—11101B表示成机器数为111101B。
2、原码、反码和补码的概念1)概念机器数有原码、反码和补码三种表示方法。
原码:是最简单的机器数表示法。
什么是原码、反码、补码
[-1] = [10000001]原 = [11111110]反 = [11111111]补
对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.
三. 为何要使用原码, 反码和补码
在开始深入学习前, 我的学习建议是先"死记硬背"上面的原码, 反码和补码的表示方式以及计算方法.
1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原
这样0用[0000 0000]表示, 而以前出现问题的-0则不存在了.而且可以用[1000 0000]表示-128:
于是人们开始探索 将符号位参与运算, 并且只保留加法的方法. 首先来看原码:
计算十进制的表达式: 1-1=0
1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2
如果用原码表示, 让符号位也参与计算, 显然对于减法来说, 结果是不正确的.这也就是为何计算机内部不使用原码表示一个数.
一. 机器数和真值
在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念.
1、机器数
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.
比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。
x mod y = x - y L x / y J
补码、原码、反码
补码、原码、反码一、定义1.原码正数的符号位为0,负数的符号位为1,其它位按照一般的方法来表示数的绝对值。
用这样的表示方法得到的就是数的原码。
【例2.13】当机器字长为8位二进制数时:X=+1011011 [X]原码=01011011Y=-1011011 [Y]原码=11011011[+1]原码=00000001 [-1]原码=10000001[+127]原码=01111111 [-127]原码=11111111原码表示的整数范围是:-(2^(n-1)-1)~+(2^(n-1)-1),其中n为机器字长。
则:8位二进制原码表示的整数范围是-127~+12716位二进制原码表示的整数范围是-32767~+327672.反码对于一个带符号的数来说,正数的反码与其原码相同,负数的反码为其原码除符号位以外的各位按位取反。
【例2.14】当机器字长为8位二进制数时:X=+1011011 [X]原码=01011011 [X]反码=01011011Y=-1011011 [Y]原码=11011011 [Y]反码=10100100[+1]反码=00000001 [-1]反码=11111110[+127]反码=01111111 [-127]反码=10000000负数的反码与负数的原码有很大的区别,反码通常用作求补码过程中的中间形式。
反码表示的整数范围与原码相同。
3.补码正数的补码与其原码相同,负数的补码为其反码在最低位加1。
引入补码以后,计算机中的加减运算都可以统一化为补码的加法运算,其符号位也参与运算。
【例2.15】(1)X=+1011011 (2) Y=-1011011(1)根据定义有: [X]原码=01011011 [X]补码=01011011(2)根据定义有: [Y]原码=11011011 [Y]反码=10100100 [Y]补码=10100101补码表示的整数范围是-2^(n-1)~+(2^(n-1)-1),其中n为机器字长。
计算机中数值的三种表示方法详解:原码,反码, 补码
计算机中数值的三种表示方法详解原码,反码,补码最近在学习软件评测师的知识,其中涉及到计算机的原码, 反码和补码等知识. 通过网上查阅资料,进行了深入学习,分享给大家。
本文主要从以下几点进行介绍:如何计算原码,反码,补码?为何要使用反码和补码?希望本文对大家学习计算机基础有所帮助一. 机器数和真值在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念.1、机器数一个数在计算机中的二进制表示形式, 叫做这个数的机器数。
机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.比如,十进制中的数+3 ,计算机字长为8位,转换成二进制就是00000011。
如果是-3 ,就是10000011 。
那么,这里的00000011 和10000011 就是机器数。
2、真值因为第一位是符号位,所以机器数的形式值就不等于真正的数值。
例如上面的有符号数10000011,其最高位1代表负,其真正数值是-3 而不是形式值131(10000011转换成十进制等于131)。
所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。
例:0000 0001的真值= +000 0001 = +1,1000 0001的真值= –000 0001 = –1二. 原码, 反码, 补码的基础概念和计算方法.计算机中的符号数有三种表示方法,即原码、反码和补码。
三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。
1. 原码原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:[+1]原 = 0000 0001[-1]原 = 1000 0001第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是: [1111 1111 , 0111 1111]即[-127 , 127]原码是人脑最容易理解和计算的表示方式.2. 反码反码的表示方法是:正数的反码是其本身负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.[+1] = [00000001]原 = [00000001]反[-1] = [10000001]原 = [11111110]反可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.3. 补码补码的表示方法是:正数的补码就是其本身负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)[+1] = [00000001]原 = [00000001]反 = [00000001]补[-1] = [10000001]原 = [11111110]反 = [11111111]补对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.简单总结以下,反码和补码的表示方式以及计算方法.对于正数,三种编码方式的结果都相同:正整数的原码、反码、补码完全一样,即符号位固定为0,数值位相同。
真值原码反码补码详解和习题
原码、反码和补码的概念本节要求掌握原码、反码、补码的概念知识精讲数值型数据的表示按小数点的处理可分为定点数和浮点数;按符号位有原码、反码和补码三种形式的机器数。
一.计算机中数据的表示方法1、数的定点与浮点表示在计算机内部,通常用两种方法来表示带小数点的数,即所谓的定点数和浮点数。
①定点数:是小数点在数中的位置是固定不变的数,数的最高位为符号位,小数点可在符号位之后,也可在数的末尾,小数点本身不需要表示出来,它是隐含的。
缺点:只有纯小数或整数才能用定点数表示;②浮点数:小数点在数中的位置是浮动的、不固定的数。
一般浮点数既有整数部分又有小数部分,通常对于任何一个二进行制数N,总可以表示成:N=±2P×SN、P、S均为二进制数,P为N的阶码,一般为定点整数,常用补码表示,阶码指明小数点在数据中的位置,它决定浮点的表示范围S为N的尾数,一般为定点小数,常用补码或原码表示,尾数部分给出了浮点数的有效数字位数,它决定了浮点数的精度,且规格化浮点数0.5≤|S|<1;0.1B=( 1/2 )D =( 2-1)D0.11B=(1/2 + 1/4 )D =( 2-1+2-2)D0.111B=(1/2 + 1/4 + 1/8 )D =( 2-1+2-2+2-3)D ---------------------------在计算机中表示一个浮点数其结构为:假设用八个二进制位来表示一个浮点数,且阶码部分占4位,其中阶符占一位;尾数部分占4位,尾符也占一位。
若现有一个二进制数N=(101100)2可表示为:2110×0.1011,则该数在机器内的表示形式为:101100B= 10110B * (21)D101100B= 1011B * (22)D101100B= 101.1B * (23)D101100B= 10.11B * (24)D101100B= 1.011B * (25)D101100B= 0.1011B * (26110一个浮点形式的尾数S若满足0.5≤|S|<1,且尾数的最高位数为1,无无效的0,则该浮点数称为规格化数;规格化数可以提高运算的精度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
运算规则:[x+y]补=[x]取补+[y]补
②定点补码减法运算
补 补 补 补 运算规则:[x-y] =[x+(-y)] =[x] +[-y]
补 补 [-y] 的求法是将[y] 的各位(包括符号位)全取反,最末位
反码:正数的反码同原码, 负数的反码为除符号位外,其它各位 按位取反。
正数的反码是其本身, 负数的反码是在其原码的基础上,符号 位不变,其余各个位取反
1的反码是00000001, —1的反码是11111110。
补码:正数的补码同原码,负数的补码为反码加1。 负数的补码是在其原码的基础上, 符号位不变, 其余各
加1。
补 补 即将[y] 连同符号位一起取反加1便可得到[-y] 。
[-x]补=模 - [x]补
[x]补=模 - [-x]补 比如8bit,模= 28
如:
补 补 补= [y] =10001010,则[-y] =01110110; [-1]
28 - [1]
补=1_0000_0000 - 0000_0001 = 1111_1111
若计算结果比能表示的最大数还大则称为上溢,上溢时一般作溢出 中断处理;
若计算结果比能表示的最小数还小则称为下溢,下溢时一般作机器 零处理。
下面介绍用双符号判断溢出方法:
引入两个符号位Cs+1、Cs Cs+1用来表示两个符号位向更高位进位时的状态,有进位时 Cs+1=1,无进位时Cs+1=0; Cs用来表示两数值的最高位向符号位进位时的状态,有进位时 Cs=1,无进位时Cs=0; 当Cs+1Cs=00或11时,无溢出;当Cs+1Cs=01或10时,有溢出,
对时钟(模=12)而言,8和4互为补数。
以12模的系统中,11和1;10和2;9和3;7和5;6和6都互为补数。共同 的特点是两者相加等于模 对于计算机,其概念和方法完全一样。 n位计算机,设n=8, 所能表示的最大数是11111111,若再加1称为 100000000(9位) 但因只有8位,最高位1自然丢失。又回了00000000,所以8位二进制系
S为原码表示,则 S1=1 规格化数
S为补码表示 N为正数,则S1 =1 N为负数,则S1=0
二、原码、反码和补码 1、机器数与真值
机器数:在计算机中数据和符号全部数字化,最高位为符号位,且 用0表示正、1表示负,那么把包括符号在内的一个二进制数我们称为机 器数,机器数: 有原码、反码和补码三种表示方法。
101100B= 1011B * (22)D
101100B= 101.1B * (23)D
101100B= 10.11B * (24)D
101100B= 1.011B * (25)D
101100B= 0.1011B * (26)D=0.1011B * (2110)B
01 1 001 1 0 1
一个浮点形式的尾数S若满足0.5≤|S|<1,且尾数的最高位数为1,无 无效的0,则该浮点数称为规格化数;规格化数可以提高运算的精度。
把补数用到计算机对数的处理上,就是补码。
负数取模 x mod y = x - y*int( x / y )
int( x / y ) VB语法表示:不大于(x/y)的最大整 数,即向下取整
int(-1.5)=-2 Fix(-1.5)=-1 举例: -3 mod 2 = -3 - 2*int(-3/2) = -3 - 2* (-2) = -3 - 2x(-2)=1
原码、反码和补码的概念 本节要求
掌握原码、反码、补码的概念
知识精讲 数值型数据的表示按小数点的处理可分为定点数和浮点数;按符号
位有原码、反码和补码三种形式的机器数。 一.计算机中数据的表示方法
1、数的定点与浮点表示 在计算机内部,通常用两种方法来表示带小数点的数,即所谓的定 点数和浮点数。 ①定点数:是小数点在数中的位置是固定不变的数,数的最高位为符 号位,小数点可在符号位之后,也可在数的末尾,小数点本身不需要表 示出来,它是隐含的。 缺点:只有纯小数或整数才能用定点数表示; ②浮点数:小数点在数中的位置是浮动的、不固定的数。
尾数部分
阶符 阶数
尾符 尾数
Ef
E1E2…Em Sf
S1S2…Sn
假设用八个二进制位来表示一个浮点数,且阶码部分占4位,其中 阶符占一位;尾数部分占4位,尾符也占一位。
若现有一个二进制数N=(101100)2可表示为:2110×0.1011,则 该数在机器内的表示形式为:
101100B= 10110B * (21)D
当双符号位为01时正溢出,当双符号位为10时负溢出;
补 补 补 例如:[x] =10011100,[y] =10011000,则[x+y] = 。
溢出,因为Cs+1Cs=10。故溢出逻辑表达式为V=Cs+1⊕Cs
④无符号数的运算 无符号数的运算实际上是指参加运算的操作数X、Y均为正数,且整 个字长全部用于表示数值部分。 当两个无符号数相加时,其值在字长表示的范围内,其结果为正 数。 当两个无符号数相减时,其值的符号位取决于两数绝对值的大小。 另外,地址在计算机中用无符号数表示。
四原码, 反码, 补码再深入
计算机巧妙地把符号位参与运算, 并且将减法变成了加法, 背后蕴含了 怎样的数学原理呢? 将钟表想象成是一个1位的12进制数. 如果当前时间是6点, 我希望将时 间设置成4点, 我们可以: 1. 往回拨2个小时: 6 - 2 = 4 2. 往前拨10个小时: (6 + 10) mod 12 = 4 3. 往前拨10+12=22个小时: (6+22) mod 12 =4
2,3方法中的mod是指取模操作, 16 mod 12 =4 即用16除以12后的余数 是4. 所以钟表往回拨(减法)的结果可以用往前拨(加法)替代!
现在的焦点就落在了如何用一个正数, 来替代一个负数. 上面的例 子我们能感觉出来一些端倪, 发现一些规律. 但是数学是严谨的. 不能 靠感觉. 首先介绍一个数学中相关的概念: 同余
(2)假设码长为8位,写出原码、反码和补码所能表示定点整数和 定点小数的范围。
二进制定点 十进制定 n位可表示 二进制定点 十进制定点
整数
点整数 的个数 小数
小数
原 11111111~ -127~ 码 01111111 +127
2n-1个
1.1111111~ -127/128~ 0.1111111 +127/128
1000 0001的真值 = -000 0001 = -1
2、原码、反码和补码的概念 1)概念 机器数: 有原码、反码和补码三种表示方法。
原码:是最简单的机器数表示法。其数符位用0表示正,1表示负, 其余各位表示真值本身。
即用第一位表示符号, 其余位表示值,比如如果是8位二进 制:
1的原码是00000001, —1的原码是10000001。
统的模为28。
在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补 数表示就可以了。
[-x]补=模 - [x]补 [x]补=模 - [-x]补 比如8bit,模= 28
[-1]补=28 - [1]补=1_0000_0000 - 0000_0001 = 1111_1111 [-(-1)]补=28 - [-1]补=1_0000_0000 - 1111_1111 = 0000_0001
“模”是指一个计量系统的计数范围
例如:时钟的计量范围是0~11,模=12。
表示n位的计算机计量范围是0~2n -1,模=2n
“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出 来,计量器上只能表示出模的余数。任何有模的计量器,均可化减法 为加法运算。 比如:时钟(模=12)中,加8和减4效果是一样的,因此凡是减4运算, 都可以用加8来代替
补 补 补= [y] =0100,则[-y] =1100; [-(-1)]
28 - [-1]
补=1_0000_0000 - 1111_1111 = 0000_0001
注意:在进行运算时有时会发生溢出。 ③定点补码运算的溢出处理 采用补码运算时若结果的数值超出了补码所能表示的范围,则此种 情况称为溢出。
一般浮点数既有整数部分又有小数部分,通常对于任何一个二进行 制数N,总可以表示成:
N=±2P×S N、P、S均为二进制数, P为N的阶码,一般为定点整数,常用补码表示,阶码指明小数点在数 据中的位置,它决定浮点的表示范围
S为N的尾数,一般为定点小数,常用补码或原码表示,尾数部分给出了 浮点数的有效数字位数,它决定 了浮点数的精度,且规格化浮点 数0.5≤|S|<1;
0.1B=( 1/2 )D
=( 2-1 )D
0.11B=(1/2 + 1/4 )D =( 2-1 + 2-2 )D
0.111B=(1/2 + 1/4 + 1/8 )D =( 2-1 + 2-2 + 2-3)D ----------
-----------------
在计算机中表示一个浮点数其结构为:
阶码部分
反 10000000~ -127~ 码 01111111 +127
2n-1个
1.1111111~ -127/128~ 0.1111111 +127/128
补 10000000~ -128~ 码 01111111 +127
(-128)代 替了(-0)
2n个
1.1111111~ -1~-127/128 0.1111111
真 +0
-0
+1
-1
+127