2.1各数原码、反码、补码和移码见下表
计算机组成原理课后答案(第三版·白中英)
计算机组成原理各章答案(白中英·第三版)第一章答案1.比较数字计算机和模拟计算机的特点。
解:模拟计算机的特点:数值由连续量来表示,运算过程是连续的;数字计算机的特点:数值由数字量(离散量)来表示,运算按位进行。
两者主要区别见P1 表1.1。
2.数字计算机如何分类?分类的依据是什么?解:分类:数字计算机分为专用计算机和通用计算机。
通用计算机又分为巨型机、大型机、中型机、小型机、微型机和单片机六类。
分类依据:专用和通用是根据计算机的效率、速度、价格、运行的经济性和适应性来划分的。
通用机的分类依据主要是体积、简易性、功率损耗、性能指标、数据存储容量、指令系统规模和机器价格等因素。
3.数字计算机有那些主要应用?4.冯. 诺依曼型计算机的主要设计思想是什么?它包括哪些主要组成部分?解:冯. 诺依曼型计算机的主要设计思想是:存储程序和程序控制。
存储程序:将解题的程序(指令序列)存放到存储器中;程序控制:控制器顺序执行存储的程序,按指令功能控制全机协调地完成运算任务。
主要组成部分有:控制器、运算器、存储器、输入设备、输出设备。
5.什么是存储容量?什么是单元地址?什么是数据字?什么是指令字?解:存储容量:指存储器可以容纳的二进制信息的数量,通常用单位KB、MB、GB来度量,存储容量越大,表示计算机所能存储的信息量越多,反映了计算机存储空间的大小。
单元地址:单元地址简称地址,在存储器中每个存储单元都有唯一的地址编号,称为单元地址。
数据字:若某计算机字是运算操作的对象即代表要处理的数据,则称数据字。
指令字:若某计算机字代表一条指令或指令的一部分,则称指令字。
6.什么是指令?什么是程序?解:指令:计算机所执行的每一个基本的操作。
程序:解算某一问题的一串指令序列称为该问题的计算程序,简称程序。
7.指令和数据均存放在内存中,计算机如何区分它们是指令还是数据?解:一般来讲,在取指周期中从存储器读出的信息即指令信息;而在执行周期中从存储器中读出的信息即为数据信息。
正码、补码、反码、移码
正码、补码、反码、移码数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是二进制。
数在计算机中是以二进制形式表示的。
数分为有符号数和无符号数。
原码、反码、补码都是有符号定点数的三种表示方法。
一个有符号定点数的最高位为符号位,0是正,1是负。
原码:一个整数,按照绝对值大小转换成的二进制。
可在前方填“0”或“1”,“0”表示正,“1”表示负,即最高位为符号位,其余位表示数值的大小。
原码能表示数值的范围为 (-127~-0 +0~127)共256个.反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。
正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
即:正数:原码=反码=补码负数:反码=原码每位取反(符号位除位)补码=反码+1(如果+1之后有进位的,要一直往前进位,包括符号位)1、原码、反码和补码的表示方法(1)原码:在数值前直接加一符号位的表示法。
例如:符号位数值位[+7]原= 0 0000111 B[-7]原= 1 0000111 B真值0的原码和反码表示不唯一,而补码表示是唯一的[+0]原=000...0,[-0]原=100 0[+0]反=000...0,[-0]反=111 (1)[+0]补=[-0]补=000 0[+0]原=00000000B [-0]原=10000000B[+0]反=00000000B [-0]反=11111111了[+0]补=000…0B [10000000]补=[10000000]反+1=11111111+1=(1)00000000 =00000000(最高位溢出了,符号位变成了0)补码在微型机中是一种重要的编码形式,请注意:a.采用补码后,可以方便地将减法运算转化成加法运算,运算过程得到简化。
正数的补码即是它所表示的数的真值,而负数的补码的数值部份却不是它所表示的数的真值。
计算机组成原理第六章答案
1. 写出下列各数的原码、反码、补码、移码(用8位二进制表示),其中MSB是最高位(符号位),LSB是最低位。
如果是小数,则小数点在MSB之后;如果是整数,则小数点在LSB之后。
(1)-59/64 (2)27/128 (3)-127/128(4)用小数表示-1(5)用整数表示-1 (6)-127 (7)35 (8)-1282. 设[x]补=x0.x1x2x3x4,其中x i取0或1,若要使x>-0.5,则x0、x1、x2、x3、x4的取值应满足什么条件?3. 若32位定点小数的最高位为符号位,用补码表示,则所能表示的最大正数为,最小正数为,最大负数为,最小负数为;若32位定点整数的最高位为符号位,用原码表示,则所能表示的最大正数为,最小正数为,最大负数为,最小负数为。
4. 若机器字长为32位,在浮点数据表示时阶符占1位,阶码值占7位,数符占1位,尾数值占23位,阶码用移码表示,尾数用原码表示,则该浮点数格式所能表示的最大正数为,最小正数为,最大负数为,最小负数为。
5. 某机浮点数字长为18位,格式如图2.35所示,已知阶码(含阶符)用补码表示,尾数(含数符)用原码表示。
(1)将(-1027)10表示成规格化浮点数;(2)浮点数(0EF43)16是否是规格化浮点数?它所表示的真值是多少?图2.35 浮点数的表示格式6. 有一个字长为32位的浮点数,格式如图2.36所示,已知数符占1位;阶码占8位,用移码表示;尾数值占23位,尾数用补码表示。
图2.36 浮点数的表示格式请写出:(1)所能表示的最大正数;(2)所能表示的最小负数;(3)规格化数所能表示的数的范围。
7. 若浮点数x的IEEE754标准的32位存储格式为(8FEFC000)16,求其浮点数的十进制数值。
8. 将数(-7.28125)10转换成IEEE754标准的32位浮点数的二进制存储格式。
9. 已知x=-0.x1x2…x n,求证:[x]补=+0.00…01。
二进制5位数原码、补码、反码表
原码、补码和反码是在计算机中常用的一种数据表示方式。
在这种表示方式中,正数和负数均采用二进制形式表示,通过一定的规则进行转换。
本文将以二进制5位数为例,对原码、补码和反码进行详细介绍和表格展示。
一、二进制5位数原码、补码、反码定义1.1 原码定义原码是最简单的一种表示方式,它的规则是:正数的原码就是其二进制形式,负数的原码是在正数原码的基础上将最高位(符号位)变为1。
+2在5位二进制数中的原码是xxx,-2在5位二进制数中的原码是xxx。
1.2 补码定义补码是计算机中常用的一种表示方式,它的规则是:正数的补码就是其二进制形式,负数的补码是将其绝对值的原码按位取反然后加1。
+2在5位二进制数中的补码是xxx,-2在5位二进制数中的补码是xxx。
1.3 反码定义反码是原码的一种变换形式,它的规则是:正数的反码就是其二进制形式,负数的反码是将其绝对值的原码按位取反。
+2在5位二进制数中的反码是xxx,-2在5位二进制数中的反码是xxx。
二、二进制5位数原码、补码、反码表以下是以二进制5位数为例的原码、补码和反码一览表:原码补码反码xxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxxxxx xxx xxx三、总结通过以上原码、补码和反码的定义和表格展示,我们可以清楚地了解二进制5位数的原码、补码和反码之间的转换规则和关系。
原码、反码、补码、移码,阶码如何表示?
原码、反码、补码、移码,阶码如何表⽰?
举例:[+45]原=00101101 -45=10101101 (以下所有例⼦都为这两个数的变换)
原码:
原码表⽰法在数值前⾯增加了⼀位符号位(即最⾼位为符号位):正数该位为0,负数该位为1(0有两种表⽰:+0和-0),其余位表⽰数值的⼤⼩。
举例:[+45]原=00101101 [-45]原=10101101
反码:反码是数值存储的⼀种,但是由于补码更能有效表现数字在计算机中的形式,所以多数计算机⼀般都不采⽤反码表⽰数。
反码表⽰法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
举例:[+45]反=00101101 [-45]反=11010010
补码:在计算机系统中,数值⼀律⽤补码来表⽰和存储。
原因在于,使⽤补码,可以将符号位和数值域统⼀处理;同时,加补码:
法和减法也可以统⼀处理。
此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
反码表⽰法规定:正数的补码与其原码相同;⼀种简单的⽅式,符号位保持1不变,数值位从右边数第⼀个1及其右边的0保持不变,左边按位取反。
也可以从反码推补码,就是在反码的基础上加1。
举例:[+45]补=00101101 [-45]补=11010011
移码:
移码(⼜叫增码)是符号位取反的补码,⼀般⽤做浮点数的阶码,引⼊的⽬的是为了保证浮点数的机器零为全0。
这个不分正负。
举例:[+45]移=10101101 [-45]移=01010011。
计算机组成原理(薛胜军)课后习题答案第三版(1)
1. 1计算机是一种能自动地、高速地对各种数字化信息进行运算处理的电子设备。
1. 2冯诺依曼计算机体系结构的基本思想是存储程序,也就是将用指令序列描述的解题程序与原始数据一起存储到计算机中。
计算机只要一启动,就能自动地取出一条条指令并执行之,直至程序执行完毕,得到计算结果为止。
按此思想设计的计算机硬件系统包含:运算器、控制器、存储器、输入设备和输出设备。
各部分的作用见教材:P10—P121. 3计算机的发展经历了四代。
第一代:见教材P1第二代:见教材P2第三代:见教材P2第四代:见教材P21.4系统软件定义见教材:P12—13,应用软件定义见教材:P121.5见教材:P14—151.6见教材:P111.7见教材:P6—81.8硬件定义见教材:P9软件定义见教材:P12固件定义见教材:P131.91)听觉、文字、图像、音频、视频2)图像、声音、压缩、解压、DSP1.10处理程度按从易到难是:文本→图形→图像→音频→视频第二章2.1各数的原码、反码、补码和移码见下表:2.227/64=00011011/01000000=0.0110110=0.11011×2-1规格化浮点表示为:[27/64]原=101,011011000[27/64]反=110,011011000[27/64]补=111,011011000同理:--27/64=--0.11011×2-1规格化浮点表示为:[27/64]原=101,111011000[27/64]反=110,100100111[27/64]补=111,1001010002.3 模为:29=10000000002.4 不对,8421码是十进制的编码2.5浮点数的正负看尾数的符号位是1还是0浮点数能表示的数值范围取决于阶码的大小。
浮点数数值的精确度取决于尾数的长度。
2.61)不一定有N1>N2 2)正确2.7 最大的正数:0111 01111111 十进制数:(1-2-7)×27最小的正数:1001 00000001 十进制数:2-7×2-7最大的负数:1001 11111111 十进制数:--2-7×2-7最小的负数:0111 10000001 十进制数:--(1-2-7)×272.81)[x]补=00.1101 [y]补=11.0010[x+y]补=[x]补+[y]补=11.1111无溢出x+y= -0.0001[x]补=00.1101 [--y]补=00.1110[x-y]补=[x]补+[--y]补=01.1011 正向溢出2)[x]补=11.0101 [y]补=00.1111[x+y]补=[x]补+[y]补=00.0100 无溢出x+y= 0.0100[x]补=11.0101 [--y]补=11.0001[x-y]补=[x]补+[--y]补=10.0110 负向溢出3) [x]补=11.0001 [y]补=11.0100[x+y]补=[x]补+[y]补=10.0101 负向溢出[x]补=11.0001 [--y]补=00.1100[x-y]补=[x]补+[--y]补=11.1101 无溢出X-y=-0.00112.91)原码一位乘法 |x|=00.1111 |y|=0.1110部分积乘数 y n00.0000 0.1110+00.000000.0000→00.00000 0.111+00.111100.11110→00.011110 0.11+00.111101.011010→00.1011010 0.1+00.111101.1010010→00.11010010P f=x f⊕y f=1 |p|=|x|×|y|=0.11010010所以[x×y]原=1.11010010补码一位乘法 [x]补=11.0001 [y]补=0.1110 [--x]补=11.0001 部分积 y n y n+100.0000 0.11100→00.00000 0.1110+00.111100.11110→00.011110 0.111→00.0011110 0.11→00.00011110 0.1+11.000111.00101110[x×y]补=11.001011102)原码一位乘法 |x|=00.110 |y|=0.010部分积乘数 y n00.000 0.010+00.00000.000→00.0000 0.01+00.11000.1100→00.01100 0.0+00.00000.01100 0→00.001100P f=x f⊕y f=0 |p|=|x|×|y|=0.001100所以[x×y]原=0.001100补码一位乘法 [x]补=11.010 [y]补=1.110 [--x]补=00.110部分积 y n y n+100.000 1.1100→00.0000 1.110+00.11000.1100→00.01100 1.11→00.001100 1.1所以[x×y]补=0.0011002.101)原码两位乘法 |x|=000.1011 |y|=00.0001 2|x|=001.0110部分积乘数 c000.0000 00.00010+000.1011000.1011→000.001011 0.000→000.00001011 00.0P f=x f⊕y f=1 |p|=|x|×|y|=0.00001011所以[x×y]原=1.00001011补码两位乘法 [x]补=000.1011 [y]补=11.1111 [--x]补=111.0101部分积乘数 y n+1000.0000 11.11110+111.0101111.0101→111.110101 11.111→111.11110101 11.1所以[x×y]补=111.11110101 x×y=--0.000010112)原码两位乘法 |x|=000.101 |y|=0.111 2|x|=001.010 [--|x| ]补=111.011 部分积乘数 c000.000 0.1110+111.011111.011→111.11011 0.11+001.010001.00011→000.100011P f=x⊕y f=0 |p|=|x|×|y|=0.100011所以[x×y]原=0.100011补码两位乘法 [x]补=111.011 [y]补=1.001 [--x]补=000.101 2[--x]补=001.010 部分积乘数 y n+1000.000 1.0010+111.011111.011→111.111011 1.00+001.010001.00011→000.100011所以[x×y]补=0.1000112.111) 原码不恢复余数法 |x|=00.1010 |y|=00.1101 [--|y| ]补=11.0011部分积商数00.1010+11.00111101101 0←11.1010+00.110100.0111 0.1←00.1110+11.001100.0001 0.11←00.0010+11.001111.0101 0.110←01.1010+00.110111.0111 0.1100+00.110100.0100所以[x/y]原=0.1100 余数[r]原=0.0100×2—4补码不恢复余数法 [x]补=00.1010 [y]补=00.1101 [--y]补=11.0011 部分积商数00.1010+11.001111.1101 0←11.1010+00.110100.0111 0.1←00.1110+11.001100.0001 0.11←00.0010+11.001111.0101 0.110←10.1010+00.110111.0111 0.1100+00.110100.0100所以[x/y]补=0.1100 余数[r]补=0.0100×2—42)原码不恢复余数法 |x|=00.101 |y|=00.110 [--|y| ]补=11.010 部分积商数00.101+11.01011.111 0←11.110+00.11000.100 0.1←01.000+11.01000.010 0.11←00.100+11.01011.110 0.110+00.11000. 100所以[x/y]原=1.110 余数[r]原=1.100×2—3补码不恢复余数法 [x]补=11.011 [y]补=00.110 [--y]补=11.010 部分积商数11.011+00.11000.001 1←00.010+11.01011.100 1.0←11.000+00.11011.110 1.00←11.100+00.11000.010 1.001+11.01011.100所以[x/y]补=1.001+2—3=1.010 余数[r]补=1.100×2—32.121)[x]补=21101×00.100100 [y]补=21110×11.100110小阶向大阶看齐: [x]补=21110×00.010010求和:[x+y]补=21110×(00.010010+11.100110)=21110×11.111000 [x-y]补=21110×(00.010010+00.011010)=21110×00.101100 规格化:[x+y]补=21011×11.000000 浮点表示:1011,11.000000规格化:[x-y]补=21110×00.101100 浮点表示:1110,0.101100 2)[x]补=20101×11.011110 [y]补=20100×00.010110小阶向大阶看齐:[y]补=20101×00.001011求和:[x+y]补=20101×(11.011110+00.001011)=20101×11.101001 [x-y]补=20101×(11.011110+11.110101)=20101×00.010011 规格化:[x+y]补=21010×11.010010 浮点表示:1010,11. 010010规格化:[x-y]补=21010×00.100110 浮点表示:1010,00.1001102.13见教材:P702.141)1.0001011×262)0.110111*×2-62.151)串行进位方式C1=G1+P1C0 G1=A1B1, P1=A1⊕B1C2=G2+P2C1 G2=A2B2, P2=A2⊕B2C3=G3+P3C2 G3=A3B3, P3=A3⊕B3C4=G4+P4C3 G4=A4B4, P4=A4⊕B42)并行进位方式C1=G1+P1C0C2=G2+P2G1+P2P1C0C3=G3+P3G2+P3P2G1+P3P2P1C0C4= G4+P4G3+P4P3G2+P4P3P2G1+P4P3P2P1C02.16参考教材P62 32位两重进位方式的ALU和32位三重进位方式的ALU 2.17第三章3.1见教材:P793.2 见教材:P833.3与SRAM相比,DRAM在电路组成上有以下不同之处:1)地址线的引脚一般只有一半,因此,增加了两根控制线RAS、CAS,分别控制接受行地址和列地址。
原码,反码,补码,移位
原码,反码,补码,移位复习下⼆进制的有关知识1.所有的数据都是以⼆进制的形式存储在硬盘上。
对于⼀个字节的8位到底是什么类型计算机是如何分辨的呢? 其实计算机并不负责判断数据类型,数据类型是程序告诉计算机该如何解释内存块.2.对于字符的存储,先将字符转化成其字符集的码点,(码点就是⼀个数字),然后把该数字转成2进制存储。
所以我们只要记得数字的存储就ok了。
字符的码点程序采⽤⽆符号处理,即没有符号位,数值型默认都是有符号位的。
1个字节的最⾼位是符号位所以⼀个数字能够存储的范围是-128-1273.原码正数5: 0000 0101负数5: 1000 01014.反码正数5: 0000 0101负数5: 1111 10105.补码正数5: 0000 0101负数5: 1111 1011(-5在硬盘上的存储⽅式)1.可以看到正数的原码与其反码补码相同2.负数的原码最⾼位为13.负数的反码:符号位不变,其余各位按位取反4.负数的补码:在其反码的基础上+15.负数是以其补码的⽅式存储在硬盘上的6.左移操作(<<)规则:右边空出的位⽤0填补⾼位左移溢出则舍弃该⾼位。
计算机中常⽤补码表⽰数据:数据127,补码和原码⼀样:01111111。
左移⼀位: 1111 1110 -> 这个补码对应的原码为:1000 0010 对应⼗进制:-2左移⼆位: 1111 1100 -> 这个补码对应的原码为:1000 0100 对应⼗进制:-4左移三位: 1111 1000 -> 这个补码对应的原码为:1000 1000 对应⼗进制:-8左移四位: 1111 0000 -> 这个补码对应的原码为:1001 0000 对应⼗进制:-16左移五位: 1110 0000 -> 这个补码对应的原码为:1010 0000 对应⼗进制:-32左移六位: 1100 0000 -> 这个补码对应的原码为:1100 0000 对应⼗进制:-64左移七位: 1000 0000 -> 这个补码对应的原码为:1000 0000 对应⼗进制:-128左移⼋位: 0000 0000 -> 这个补码对应的原码为:0000 0000 对应⼗进制:0注:原码到补码的计算⽅式:取反+1,补码到原码的计算⽅式:-1再取反。
CH02-1 运算方法-二进制数据表示,定点加法,溢出判断(2.1-2.4.5,附录,2.10)
2.2.2 补码表示法
1.概念与定义 例:先分析两个10进制数的运算 58-35=23 58+65=123 =100+23 如果使用两位10进制的运算器,在做加法58+65 时,结果中的100超出了该运算器的表示范围,将会 被自动舍去,运算器只能表示出结果23。在做减法 58-35时,若用加法58+65能得到同样的结果23。
[x]补 =
5.补码的性质
(1)补码的最高位是符号位,在形式上同于原 码,0表示正,1表示负。但应注意,原码的 符号位是人为地定义0正1负;而补码的符号 位是通过有模运算得到的,它是数值的一部 分,可直接参与运算。 (2)正数的补码表示在形式上同于原码;而负数 的补码表示则不同于原码,可用负数原码求 补方法进行转换。
2.2.3 反码表示法
1.定点小数的反码表示 定义:反码表示法是用机器数的最高一位代表 符号,数值位是对负数值各位取反的表 示方法,其数学表达式为(定点小 数): x 0 ≤ x <1 ⎧ [x]反 = ⎨ (2 − 2− n ) + x − 1 < x ≤ 0 ⎩ 其中n代表数的位数(不包括符号位), 或者说字长是n+1位。
= 10.00L0 − 0.00L1 = 1.11L1
2.定点整数的反码表 示:
对定点整数,反码表示的定义是:
⎧ x [x]反 = ⎨ n +1 ⎩(2 − 1) + x 0≤ x<2
(1)真值0在原码表示中有两种形式,以定点整 数为例 [+ 0]原 = 0000 [− 0]原 = 1000 (2)原码表示的定点小数,其表示范围为
− 1 < x < 1, 即 x < 1
原码表示的定点整数,其表示范围为
机器码
2.1.2 数的机器码表示在计算机中对数据进行运算操作时,符号位如何表示呢?是否也同数值位一道参加运算操作呢?为了妥善的处理好这些问题,就产生了把符号位和数字位一起编码来表示相应的数的各种表示方法,如原码、补码、反码、移码等。
为了区别一般书写表示的数和机器中这些编码表示的数,通常将前者称为真值,后者称为机器数或机器码。
若定点小数的原码形式为x0x1x2…xn,则原码表示的定义是(2.7)式中[x]原是机器数,x是真值例如,x=+0.1001,则[x]原=0.1001x=-0.1001,则[x]原=1.1001对于0,原码机器中往往有“+0”、“-0”之分,故有两种形式:[+0]原=0.000 0[-0]原=1.000 0若定点整数的原码形式为x0x1x2…xn,则原码表示的定义是(2.8)采用原码表示法简单易懂,但它的最大缺点是加法运算复杂。
这是因为,当两数相加时,如果是同号则数值相加;如果是异号,则要进行减法。
而在进行减法时还要比较绝对值的大小,然后大数减去小数,最后还要给结果选择符号。
为了解决这些矛盾,人们找到了补码表示法。
我们先以钟表对时为例说明补码的概念。
假设现在的标准时间为4点正;而有一只表已经7点了,为了校准时间,可以采用两种方法:一是将时针退 7-4=3 格;一是将时针向前拨12-3=9格。
这两种方法都能对准到4点,由此可以看出,减3和加9是等价的,就是说9是(-3)对12的补码,可以用数学公式表示-3=+9(mod12)mod12的意思就是12模数,这个“模”表示被丢掉的数值。
上式在数学上称为同余式。
上例中其所以7-3和7+9(mod12)等价,原因就是表指针超过12时,将12自动丢掉,最后得到16-12=4。
从这里可以得到一个启示,就是负数用补码表示时,可以把减法转化为加法。
这样,在计算机中实现起来就比较方便。
若定点小数补码形式为x0.x1x2…xn,则补码表示的定义是(2.9)例如,x=+0.1011,则[x]补=0.1011x=-0.1011,则[x]补=10+x=10.0000-0.1011=1.0101对于0,[+0]补=[-0]补=0.0000 (mod 2)注意,0的补码表示只有一种形式。
原码、反码、补码、移码、阶码、BCD码、余3码
原码、反码、补码、移码、阶码、BCD码、余3码原码:原码(true form)是一种计算机中对数字的二进制定点表示方法。
源码表示法在数值前面增加了一位符号位(即最高位为符号位),该位为0表示正数,该位为1表示负数。
反码:反码表示法规定:正数的反码于原码相同;负数的反码是其原码除符号位外逐位取反。
补码:补码(two’s complement) 1、在计算机中,数值一律用补码表示(存储)。
主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法处理。
另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
2、补码与原码的转换过程几乎是相同的。
==补码的概述==求给定数值的补码表示分以下两种情况:(1)正数的补码:与原码相同。
【例1】+9的补码是00001001。
(这个+9的补码说的是用8位的2进制来表示补码的,补码表示表示方式很多,还有16位2进制补码表示形式,以及32位2进制补码表示形式等。
)(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后加1。
同一数字在不同的补码表示形式里头是不同的。
【例2】求-7的补码。
因为给定数是负数,则符号位为“1”。
后七位:+7的原码(0000111)→按位取反(1111000)→加1(1111001),所以-7的补码为1111001。
已知一个数的补码,求原码的操作分两种情况:(1)如果补码的符号位为“0”,表示是一个正数,其原码就是补码。
(2)如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。
另一种方法求负数的补码,如下:例如:求-15的补码第一步:+15:00001111第二步:逐位取反,然后在末位加1。
11110001【例3】已知一个补码11111001则原码是10000111(-7)。
(补码的补码)“模”的概念“模”是指一个计量系统的计数范围。
如时钟等。
计算机也可以看成一个计量机器,它也有一个计量范围,即都存在一个“模”。
原码反码补码ppt课件
5
原码
.
原码举例
➢8位二进制编码
真值:X = + 101
Y = 1010
原码:[ X ]原 = 00000101 [ Y ]原 = 10001010 ➢若真值中数字个数(不含高位0)多于(n-1),则不
能用n位原码编码
✓如 X=+10101010
② |B| >|A| |B|-|A|
③ 1110 -) 1011
0011 ④[A+B] 原 =10011
A +B = -0011
7
原码
原码特点
➢优点
✓简单直观,容易理解
➢缺点
✓零的形式不唯一 ✓做加法和减法运算较为复杂,要对符号位和数值的
绝对值大小进行判断
需要设计新的码制!
8
反码
<符号部分> <数值部分>
➢反码如何转换成原码?
✓正数:相同;负数:数值按位取反
9
反码
反码的性质
➢反码表示
✓若x = + x1x2 ⋯ xn-1 ,则[x]反= 0x1x2 ⋯ xn-1
✓若x = - x1x2 ⋯ xn-1 , 则[x]反—= 1—x1x2—⋯ xn-1
➢反码的表示范围与原码相同
✓0有两种表示形式 [ + 00 ⋯0 ]反= 000 ⋯0 [ - 00 ⋯0 ]反= 111 ⋯1
01011 +) 00010
01101 [A-B]补=01101
A-B=+1101
17
补码
补码运算举例(用5位二进制补码表示数)
A=+1011, B= - 1110, 求A+B [A+B]补= [A]补 + [B]补 [A]补=01011, [B]补=10010,
原码,反码,补码,移码的概念以及各自的用途和优点
原码,反码,补码,移码的概念以及各⾃的⽤途和优点1.原码将最⾼位⽤作符号位(0表⽰正数,1表⽰负数),其余各位代表数值本⾝的绝对值的表⽰形式。
例如,假设⽤8位表⽰⼀个数,则+10的原码是00001010,-10的原码是10001010。
直接使⽤原码在计算时会有⿇烦,例如,(1)10+(-1)10=0。
如果直接使⽤原码,则(00000001)2+(10000001)2=(10000010)2这样计算的结果是-2也就是说,使⽤原码直接参与计算可能会出现错误的结果。
所以,原码的符号位不能直接参与计算,必须和其他位分开,这样会增加硬件的开销和复杂性。
2.反码正数的反码与原码相同。
负数的反码符号位为1,其余各位为该数绝对值的原码按位取反。
例如,-11的反码是11110100。
同样,对上⾯的加法,使⽤反码的结果是:(00000001)2+(11111110)2=(11111111)2这样的结果是负0。
⽽在⼈们普遍的观念中,0是不分正负的。
反码的符号位可以直接引参与计算,⽽且减法也可以转换为加法计算。
3.补码正数的补码与原码相同。
负数的补码是该数的反码加1,这个加1就是“补”。
例如-11的补码为11110100+1=11110101再次做以上的加法,是这样的:+(11111111)2=(00000000)2(00000001)2这说明,直接使⽤补码进⾏计算的结果是正确的。
对⼀个补码表⽰的数,要计算其原码,只要对它再次求补即可。
由于补码能使符号位与有效值部分⼀起参与运算,从⽽简化了运算规则,同时它也使减法运算转换为加法运算,进⼀步简化计算机中运算器的电路,这使得在⼤部分计算机系统中,数据都使⽤补码表⽰。
4.移码移码⼜称为增码,移码的符号表⽰和补码相反,1表⽰正数,0表⽰负数。
也就是就是说,移码是在补码的基础上把⾸位取反得到的,这样使得移码⾮常适合于阶码的运算,所以移码常⽤于表⽰阶码。
对于正数:原码和反码,补码都是⼀样的,都是正数本⾝。
计算机基础理论 原码 补码 反码 移码
计算机基础理论:原码、反码、补码、移码一、标准理论1、原码的定义①小数原码的定义[X]原=X 0≤X <11- X -1 <X ≤ 0例如:X=+0.1011 , [X]原= 01011 X=-0.1011 [X]原= 11011②整数原码的定义[X]原=X 0≤X <2n2n-X - 2n <X ≤ 02、补码的定义①小数补码的定义[X]补=X 0≤X <12+ X -1 ≤ X < 0例如:X=+0.1011, [X]补= 01011 X=-0.1011, [X]补= 10101②整数补码的定义[X]补=X 0≤X <2n2n+1+X - 2n≤ X < 03、反码的定义①小数反码的定义[X]反=X 0≤X <12-2n-1-X -1 <X ≤ 0例如:X=+0.1011 [X]反= 01011 X=-0.1011 [X]反= 10100②整数反码的定义[X]反=X 0≤X <2n2n+1-1-X - 2n<X ≤ 04.移码:移码只用于表示浮点数的阶码,所以只用于整数。
①移码的定义:设由1位符号位和n位数值位组成的阶码,则[X]移=2n + X -2n≤X ≤ 2n例如:X=+1011 [X]移=11011 符号位“1”表示正号X=-1011 [X]移=00101 符号位“0”表示负号②移码与补码的关系:[X]移与[X]补的关系是符号位互为反码,例如:X=+1011 [X]移=11011 [X]补=01011X=-1011 [X]移=00101 [X]补=10101③移码运算应注意的问题:◎对移码运算的结果需要加以修正,修正量为2n,即对结果的符号位取反后才是移码形式的正确结果。
◎移码表示中,0有唯一的编码——1000…00,当出现000…00时(表示-2n),属于浮点数下溢。
二、补码加、减运算规则1、运算规则[X+Y]补= [X]补+[Y]补[X-Y]补= [X]补+[-Y]补若已知[Y]补,求[-Y]补的方法是:将[Y]补的各位(包括符号位)逐位取反再在最低位加1即可。
原码、补码反码
原码、反码、补码、移码正码、补码、反码、移码数在计算机中是以二进制形式表示的。
数分为有符号数和无符号数。
原码、反码、补码都是有符号定点数的表示方法。
一个有符号定点数的最高位为符号位,0是正,1是负。
反码= 原码(除符号位外)每位取反;补码= 反码+ 1;反码= 补码- 1;移码= 补码符号位取反以下都以8位整数为例,原码就是这个数本身的二进制形式。
例如0000001 就是+1 1000001 就是-1 正数的反码和补码都是和原码相同。
负数的反码是将其原码除符号位之外的各位求反[-3]反=[10000011]反=11111100 负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。
[-3]补=[10000011]补=11111101 一个数和它的补码是可逆的。
为什么要设立补码呢?第一是为了能让计算机执行减法:[a-b]补=a补+(-b)补第二个原因是为了统一正0和负0 正零:00000000 负零:10000000 这两个数其实都是0,但他们的原码却有不同的表示。
但是他们的补码是一样的,都是00000000 特别注意,如果+1之后有进位的,要一直往前进位,包括符号位!(这和反码是不同的!)[10000000]补=[10000000]反+1 =11111111+1 =(1)00000000 =00000000(最高位溢出了,符号位变成了0)有人会问10000000这个补码表示的哪个数的补码呢?其实这是一个规定,这个数表示的是-128 所以n位补码能表示的范围是-2^(n-1)到2^(n-1)-1 比n位原码能表示的数多一个又例:1011 原码:01011 反码:01011 //正数时,反码=原码补码:01011 //正数时,补码=原码-1011 原码:11011 反码:10100 //负数时,反码为原码取反补码:10101 //负数时,补码为原码取反+1 0.1101 原码:0.1101 反码:0.1101 //正数时,反码=原码补码:0.1101 //正数时,补码=原码-0.1101 原码:1.1101 反码:1.0010 //负数时,反码为原码取反补码:1.0011 //负数时,补码为原码取反+1 总结:在计算机内,定点数有3种表示法:原码、反码和补码所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
补码、原码,反码,移码
计算机中的原码、反码和补码大家都知道数据在计算机中都是按字节来储存了,1个字节等于8位(1Byte=8bit),而计算机只能识别0和1这两个数,所以根据排列,1个字节能代表256种不同的信息,即28(0和1两种可能,8位排列),比如定义一个字节大小的无符号整数(unsigned char),那么它能表示的是0~255(0~28-1)这些数,一共是256个数,因为,前面说了,一个字节只能表示256种不同的信息。
别停下,还是一个字节的无符号整数,我们来进一步剖析它,0是这些数中最小的一个,我们先假设它在计算机内部就用8位二进制表示为00000000(从理论上来说也可以表示成其他不同的二进制码,只要这256个数每个数对应的二进制码都不相同就可以了),再假设1表示为00000001,2表示为00000010,3表示为00000011,依次类推,那么最大的那个数255在8位二进制中就表示为最大的数11111111,然后,我们把这些二进制码换算成十进制看看,会发现刚好和我们假设的数是相同的,而事实上,在计算机中,无符号的整数就是按这个原理来储存的,所以告诉你一个无符号的整数的二进制码,你就可以知道这个数是多少,而且知道在计算机中,这个数本身就是以这个二进制码来储存的。
比如我给你一个2个字节大小的二进制码,首先声明它表示的是无符号的整数:00000000 00000010,我们把前面的0省略,换算一下,它表示的也是数值2,和前面不同的是,它占了2个字节的内存。
不同的类型占的内存空间不同,如在我的电脑中char是1个字节,int是4个字节,long是8个字节(你的可能不同,这取决于不同的计算机设置),它们的不同之处仅仅是内存大的能表示的不同的信息多些,也就是能表示的数范围更大些(unsigned int能表示的范围是0~28*4-1),至于怎么算,其实都是一样的,直接把二进制与十进制相互转换,二进制就是它在计算机中的样子,十进制就是我们所表示的数。
计算机数据-原码_反码_补码
计算机数据-原码_反码_补码计算机数据表示1?二进制计数制引入二进制数字系统的计算机结构和性能具有如下的优点:(1 )技术实现容易。
(2)二进制运算规则简单。
(3)计算机中二进制数的0、1 数码与逻辑代数变量值0 与1 吻合,所以二进制同时可以使计算机方便地进行逻辑运算。
(4 )二进制数和十进制数之间的关系亦不复杂。
2. 任意进制计数制和十进制计数制的相互转换十进制数转换成二进制数:十进制数据转换为二进制数时,因整数部分与小数部分转换算法不同,需要分别进行。
(1)整数转换方法除基取余法十进制整数除以2取余数作最低位系数k 0,再取商的继续除以2 取余数作高一位的系数,如此继续直到商为0 时停止,最后一次的余数就是整数部分最高有效位的二进制系数,依次所得到的余数序列就是转换成的二进制数。
因为除数2 是二进制的基数,所以这种算法称作除基取余”法。
(2)小数转换方法乘基取整法把十进制小数乘以2, 取其积的整数部分作为对应二进制小数的最高位系数k - 1,再取积的纯小数部分乘以2, 新得积的整数部分又作下一位的系数k -2 ,再取其积的纯小数部分继续乘2,…,直到乘积小数部分为0时停止,这时乘积的整数部分是二进制数最低位系数,每次乘积得到的整数序列就是所求的二进制小数,这种方法每次乘以基数取其整数作系数。
所以叫乘基取整法。
需要指出的是并不是所有十进制小数都能转换成有限位的二进制小数并出现乘积的小数部分0 的情况,有时整个换算过程会无限进行下去,此时可以根据要求并考虑计算机字长,取一定长度的位数后四舍五入,这时得到的二进制数是原十进制数的近似值。
一个既有整数部分又有小数的数送入计算机后,由机器把整数部分按除基取余” 法,小数部分按乘基取整”法分别进行转换,然后合并。
任意进制数转换成十进制数:任意一种进位计数制的数转换成十进制数的方法都是一样的。
把任意进制数按权展开成多项式和的形式,把各位的权与该位上的数码相乘,乘积逐项相加,其和便是相应的十进制数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.227/64=00011011/01000000=0.0110110=0.11011×2-1规格化浮点表示为:[27/64]原=101,011011000[27/64]反=110,011011000[27/64]补=111,011011000同理:--27/64=--0.11011×2-1规格化浮点表示为:[27/64]原=101,111011000[27/64]反=110,100100111[27/64]补=111,1001010002.3 模为:29=10000000002.4 不对,8421码是十进制的编码2.5浮点数的正负看尾数的符号位是1还是0浮点数能表示的数值范围取决于阶码的大小。
浮点数数值的精确度取决于尾数的长度。
2.61)不一定有N1>N2 2)正确2.7 最大的正数:0111 01111111 十进制数:(1-2-7)×27最小的正数:1001 00000001 十进制数:2-7×2-7最大的负数:1001 11111111 十进制数:--2-7×2-7最小的负数:0111 10000001 十进制数:--(1-2-7)×272.81)[x]补=00.1101 [y]补=11.0010[x+y]补=[x]补+[y]补=11.1111无溢出x+y= -0.0001[x]补=00.1101 [--y]补=00.1110[x-y]补=[x]补+[--y]补=01.1011 正向溢出2)[x]补=11.0101 [y]补=00.1111[x+y]补=[x]补+[y]补=00.0100 无溢出x+y= 0.0100[x]补=11.0101 [--y]补=11.0001[x-y]补=[x]补+[--y]补=10.0110 负向溢出3) [x]补=11.0001 [y]补=11.0100[x+y]补=[x]补+[y]补=10.0101 负向溢出[x]补=11.0001 [--y]补=00.1100[x-y]补=[x]补+[--y]补=11.1101 无溢出X-y=-0.00112.91)原码一位乘法|x|=00.1111 |y|=0.1110部分积乘数y n00.0000 0.1110+00.000000.0000→00.00000 0.111+00.111100.11110→00.011110 0.11+00.111101.011010→00.1011010 0.1+00.111101.1010010→00.11010010P f=x f⊕y f=1 |p|=|x|×|y|=0.11010010所以[x×y]原=1.11010010补码一位乘法[x]补=11.0001 [y]补=0.1110 [--x]补=11.0001 部分积y n y n+100.0000 0.11100→00.00000 0.1110+00.111100.11110→00.011110 0.111→00.0011110 0.11→00.00011110 0.1+11.000111.00101110[x×y]补=11.001011102)原码一位乘法|x|=00.110 |y|=0.010部分积乘数y n00.000 0.010+00.00000.000→00.0000 0.01+00.11000.1100→00.01100 0.0+00.00000.01100 0→00.001100P f=x f⊕y f=0 |p|=|x|×|y|=0.001100所以[x×y]原=0.001100补码一位乘法[x]补=11.010 [y]补=1.110 [--x]补=00.110部分积y n y n+100.000 1.1100→00.0000 1.110+00.11000.1100→00.01100 1.11→00.001100 1.1所以[x×y]补=0.0011002.101)原码两位乘法|x|=000.1011 |y|=00.0001 2|x|=001.0110部分积乘数 c000.0000 00.00010+000.1011000.1011→000.001011 0.000→000.00001011 00.0P f=x f⊕y f=1 |p|=|x|×|y|=0.00001011所以[x×y]原=1.00001011补码两位乘法[x]补=000.1011 [y]补=11.1111 [--x]补=111.0101 部分积乘数y n+1000.0000 11.11110+111.0101111.0101→111.110101 11.111→111.11110101 11.1所以[x×y]补=111.11110101 x×y=--0.000010112)原码两位乘法|x|=000.101 |y|=0.111 2|x|=001.010 [--|x| ]补=111.011 部分积乘数 c000.000 0.1110+111.011111.011→111.11011 0.11+001.010001.00011→000.100011P f=x⊕y f=0 |p|=|x|×|y|=0.100011所以[x×y]原=0.100011补码两位乘法[x]补=111.011 [y]补=1.001 [--x]补=000.101 2[--x]补=001.010 部分积乘数y n+1000.000 1.0010+111.011111.011→111.111011 1.00+001.010001.00011→000.100011所以[x×y]补=0.1000112.111) 原码不恢复余数法|x|=00.1010 |y|=00.1101 [--|y| ]补=11.0011部分积商数00.1010+11.00111101101 0←11.1010+00.110100.0111 0.1←00.1110+11.001100.0001 0.11←00.0010+11.001111.0101 0.110←01.1010+00.110111.0111 0.1100+00.110100.0100所以[x/y]原=0.1100 余数[r]原=0.0100×2—4补码不恢复余数法[x]补=00.1010 [y]补=00.1101 [--y]补=11.0011 部分积商数00.1010+11.001111.1101 0←11.1010+00.110100.0111 0.1←00.1110+11.001100.0001 0.11←00.0010+11.001111.0101 0.110←10.1010+00.110111.0111 0.1100+00.110100.0100所以[x/y]补=0.1100 余数[r]补=0.0100×2—42)原码不恢复余数法|x|=00.101 |y|=00.110 [--|y| ]补=11.010 部分积商数00.101+11.01011.111 0←11.110+00.11000.100 0.1←01.000+11.01000.010 0.11←00.100+11.01011.110 0.110+00.11000. 100所以[x/y]原=1.110 余数[r]原=1.100×2—3补码不恢复余数法[x]补=11.011 [y]补=00.110 [--y]补=11.010 部分积商数11.011+00.11000.001 1←00.010+11.01011.100 1.0←11.000+00.11011.110 1.0011.100+00.11000.010 1.001+11.01011.100所以[x/y]补=1.001+2—3=1.010 余数[r]补=1.100×2—32.121)[x]补=21101×00.100100 [y]补=21110×11.100110小阶向大阶看齐:[x]补=21110×00.010010求和:[x+y]补=21110×(00.010010+11.100110)=21110×11.111000 [x-y]补=21110×(00.010010+00.011010)=21110×00.101100 规格化:[x+y]补=21011×11.000000 浮点表示:1011,11.000000规格化:[x-y]补=21110×00.101100 浮点表示:1110,0.101100 2)[x]补=20101×11.011110 [y]补=20100×00.010110小阶向大阶看齐:[y]补=20101×00.001011求和:[x+y]补=20101×(11.011110+00.001011)=20101×11.101001 [x-y]补=20101×(11.011110+11.110101)=20101×00.010011 规格化:[x+y]补=21010×11.010010 浮点表示:1010,11. 010010规格化:[x-y]补=21010×00.100110 浮点表示:1010,00.1001102.13见教材:P702.141)1.0001011×262)0.110111*×2-62.151)串行进位方式C1=G1+P1C0G1=A1B1,P1=A1⊕B1C2=G2+P2C1G2=A2B2,P2=A2⊕B2C3=G3+P3C2G3=A3B3,P3=A3⊕B3C4=G4+P4C3G4=A4B4,P4=A4⊕B42)并行进位方式C1=G1+P1C0C2=G2+P2G1+P2P1C0C3=G3+P3G2+P3P2G1+P3P2P1C0C4= G4+P4G3+P4P3G2+P4P3P2G1+P4P3P2P1C02.16参考教材P62 32位两重进位方式的ALU和32位三重进位方式的ALU 2.17“1”。