8位原码反码补码表
原码-反码-补码及运算
原码,反码,补码及运算一、定义1.原码正数的符号位为0,负数的符号位为1,其它位按照一般的方法来表示数的绝对值。
用这样的表示方法得到的就是数的原码。
【例2.13】当机器字长为8位二进制数时:X=+1011011 [X]原码=01011011Y=-1011011 [Y]原码=11011011[+1]原码=00000001 [-1]原码=10000001[+127]原码=01111111 [-127]原码=11111111原码表示的整数范围是:-(2n-1-1)~+(2n-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补码表示的整数范围是-2n-1~+(2n-1-1),其中n为机器字长。
则:8位二进制补码表示的整数范围是-128~+127(-128 表示为10000000,无对应的原码和反码)16位二进制补码表示的整数范围是-32768~+32767当运算结果超出这个范围时,就不能正确表示数了,此时称为溢出。
计算机组成原理与系统结构课后作业答案(包健_冯建文版)
216 − 1
(2) 原码表示的定点整数:1,111…11~0,111…11 即 − ( 215 − 1) ~ 215 − 1 (3) 补码表示的定点整数:1,00…000~0,111…11 即 − 215 ~ 215 − 1 (4) 补码表示的定点小数:1.00…000~0.111…11 即 − 1 ~ 1 − 2 −15 (5) 非规格化浮点数: N = M × R E 阶码(8 位移码) 最大数= (1 − 2 −7 ) × 2 2
1 1
1 1
1 1
1 1
0 1
0 1
0 1
0 1
0 1
0 1
0 1
0 1
0 1
0 1
0 1
0 1
最高端8K ROM
128K 的 RAM 区由
128 K × 16bit = 8 × 2 = 16片 SRAM 芯片构成;分为 8 组,组与组之间 16K × 8bit
进行字扩展;每个组内有 2 片进行位扩展。
8448字 132块 = 132 ,即主存的第 0~8447 字位于连续的 132 块内。 5 = 商4余 4 ,因此这 64字 2 块
132 块连续分布在第 0~4 大组内,其中在第 4 大组中只有 4 块。
第 0大 组 共 32 块
第 1大 组
…
5
… … …
…
第 2大 组
第 3大 组
第 4大 组 4块
《运算器》
P101
3.3 写出下列各数的原码、反码和补码,机器数长度为 8 位: 真值 二进制真值 原码 反码 0,0000000 0,0000000 (1)0 0000000 1,0000000 1,1111111 (2)-127 -1111111 1,1111111 1,0000000 -0.1000000 -0.0010011 1100100 0.010111 1.1000000 1.0010011 0,1100100 0.0101110 1.0111111 1.1101100 0,1100100 0.0101110
补码问题
计算时加上正数,是不需要进行求取补数的;只有进行减法(或者加上负数),才需要对减数求补数。
补码就是按照这个要求来定义的:正数不变,负数即用模减去绝对值。
已知一个数 X,其 8 位字长的补码定义为:
/ X 0 <= X <= +127 ;正数和0的补码,就是该数字本身
----- --------
58 <--忽略进位1,结果就是正确的--[1] 0011 1010
计算结果如果超出了-128~+127的范围,结果将是错误的,这是没有办法纠正的。
应用补码进行计算,完全符合前面介绍的“用补数可把减法转换成加法”的做法,只要忽略进位(这个进位1,就是求补的时候,加进去的1 0000 0000中的1),结果就是正确的。
8 位二进制数的模可以按照十进制写成 2^8,即 256。
16 位数二进制数的模,就是 2^16,按照十进制,它就是 65536。
二进制数的补码
求二进制数的补数,目的是往计算机里面存放。
在计算机里面,存放的数字什么的,都称为机器码;那么二进制形式的补数,也就改称为补码了。
一般情况下,都是以 8 位二进制数来讨论补码,少数也有用 16 位数的。
--求反加一
负数补码的后面七位,也可以看出一个不完全的规律:它们和绝对值之间存在着“求反加一”的关系。
于是,又有人推出了这个不同于定义式的算法。
--原码和反码
由于使用“求反加一”来求取补码,顺便又引出了 原码 和 反码 两个垃圾概念。
其实,“求反加一”的计算方法只是适用于计算二进制形式的补数,它并不是通用的。
原码、反码和补码2010-12-08 11:12关于补码,看过一些书籍和网文,基本都是在“求反加一”的方法、步骤上反复强调,而对于补码的本质和定义,讨论的不足。这就对初学者的造成了误导,使得很多人都纠结在-128的补码求取过程中。
正负数反码补码
正负数反码补码原码、补码和反码(1)原码表示法原码表示法是机器数的一种简单的表示法。
其符号位用0表示正号,用:表示负号,数值一般用二进制形式表示。
设有一数为x,则原码表示可记作〔x〕原。
例如,X1= ,1010110X2= 一1001010其原码记作:〔X1〕原=[,1010110]原=01010110〔X2〕原=[,1001010]原=11001010原码表示数的范围与二进制位数有关。
当用8位二进制来表示小数原码时,其表示范围:最大值为0.1111111,其真值约为(0.99)10最小值为1.1111111,其真值约为(一0.99)10当用8位二进制来表示整数原码时,其表示范围:最大值为01111111,其真值为(127)10最小值为11111111,其真值为(,127)10在原码表示法中,对0有两种表示形式:〔+0〕原=00000000[,0] 原=10000000(2)补码表示法机器数的补码可由原码得到。
如果机器数是正数,则该机器数的补码与原码一样;如果机器数是负数,则该机器数的补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的。
设有一数X,则X的补码表示记作〔X〕补。
例如,[X1]=,1010110[X2]= 一1001010[X1]原=01010110[X1]补=01010110即 [X1]原=[X1]补=01010110[X2] 原= 11001010[X2] 补=10110101,1,10110110补码表示数的范围与二进制位数有关。
当采用8位二进制表示时,小数补码的表示范围:最大为0.1111111,其真值为(0.99)10最小为1.0000000,其真值为(一1)10采用8位二进制表示时,整数补码的表示范围:最大为01111111,其真值为(127)10最小为10000000,其真值为(一128)10在补码表示法中,0只有一种表示形式:[,0]补=00000000[,0]补=11111111,1=00000000(由于受设备字长的限制,最后的进位丢失) 所以有[,0]补=[,0]补=00000000(3)反码表示法机器数的反码可由原码得到。
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.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”。
原码反码补码
n 1
10
[例]:
X= –52= – 0110100 [X]原 = 10110100 [X]反 = 11001011 [X]补 = [X]反+1=11001100
n位补码表示数值的范围是
2n1 ~ (2n1 1)
2
•原码[X]原
定义 符号位:0表示正,1表示负; 数值位:真值的绝对值。
X X n1 2 X 2n1 X ≥ 0 0 ≥ X -2n1
3
原码的例子
符号 真值 符号位 原码
X=+18=+0010010 X=-18=-0010010
[X]原 =0 0010010 [X]原 =1 0010010
13
8位有符号数的表示范围:
对8位二进制数:
原码:
-127 ~ +127 反码: -127 ~ +127 补码: -128 ~ +127
想一想:16位有符号数的表示范围是多少?
14
ASCII码—美国标准信息交换代码
ASCII 字符表 L 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 H 000 NUL SOH STX ETX EOT ENG ACK BEL BS HT LF VT FF CR SO SI 001 DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US 010 SP ! " # $ % & ' ( ) * + , . / 011 0 1 2 3 4 5 6 7 8 9 : ; < = > ? 100 @ A B C D E F G H I J K L M N O 101 P Q R S T U V W X Y Z [ \ ] 110 ` a b c d e f g h i j k l m n o 111 p q r s t u v w x y z { | } ~ DEL
原码补码反码ppt课件
3. 定点整数补码的定义
x
当2n x0
[x]补=
2n+1+x
当 0x -2n
例:完成下列数的真值到补码的转换
X1= +1011011
[X1]补= 0,1011011
X2= -1011011
[X2]补= 27+1+x = 1,0100101
● 机器字长为8位,定点整数补码表示范围: -27≤ x ≤ 27-1
— 1011011
10100100
0的补码表示是: [+0]反=00000000; [-0]反 =11111111
结论: 正数:反码与原码相同, 负数:对原码,符号位不变,其余各位取反
为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益
为了规范事业单位聘用关系,建立和完善适应社会主义市场经济体制的事业单位工作人员聘用制度,保障用人单位和职工的合法权益
原码--补码
正数 [X]补=[X]原 负数 符号位除外,每位取反,末位加1
例:X= -1001001 求[X]补 [X]原=1,1001001, [X]补=1,0110110+1=1,0110111 [X]补= 27+1 +X=100000000-01001001= 1,0110111
由此可见, “-1”既可以在整数范围内表示,也能在小数范 围内表示,在计算机中有两种不同的补码表示。
(2) 再看负数-2n的补码表示 {-2n}补=2n+1-2n=2n-1=1,0...0(n个0)
因此,“-1”的补码小数表示与“-2n”的补码表示结构 相同,都是:符号位为1,数值部分为n个0。
计算机中带符号数的表示之原码、补码、反码
计算机中带符号数的表示之原码、补码、反码计算机中带符号数的表示之原码、补码、反码2010-09-13 12:47为叙述方便,先引进两个名词:机器数和真值。
将一个数在机器中的表示形式,即编码称为机器数,将数本身称为真值。
常用的机器数有三种:原码、补码和反码。
1.原码1)通俗定义将数的符号数码化,即用一个二进制位表示符号:对正数,该位取0,对负数,该位取1。
而数值部分保持数的原有形式(有时需要在高位部分添几个0)。
这样所得结果为该数的原码表示。
例,x=+1001010,y=-1001010,z=-1110(=-0001110)。
当原码为8位时,x、y和z的原码分别是:[x]原=01001010;[y]原=11001010;[Z]原=10001110.其中最高位为符号位。
2)正规定义其中,x为真值,n为原码的位数。
这个定义实际是将真值的范围给出来了,当n=8时,-127 x127,因而,其数值部分写成二进制形式,最多为7位。
从该定义可看出,x为正数时,其原码还是数本身,第8位(符号位)补0;x为负数时,-x等于去掉负号,但要加上127,即第8位为1(127=10000000(2))。
因此,这个定义和上面的通俗定义是一致的。
3)原码表示的特点原码表示有三个主要特点:一是直观,与真值转换很方便;二是进行乘、除运算方便;三是加、减运算比较麻烦。
第一点是显然的。
说原码表示进行乘、除运算方便是因为其数值部分保持了数据的原有形式,对数值部分进行乘或除就可得到积或商的数值部分,而积或商的符号位可由两个数原码的符号位进行逻辑运算而得到。
说原码表示进行加、减运算比较麻烦,以加法为例,两个数相加需先判别符号位,若其不同,实际要做减法,这时需再判断绝对值的大小,用绝对值大的数减绝对值小的数,最后还要决定结果的符号位。
2.补码1)补码的引进和定义据统计,在所有的运算中,加、减运算要占到80%以上,因此,能否方便地进行正、负数加、减运算,直接关系到计算机的运行效率。
1.9 原码、补码、反码
1.9 原码、补码、反码2009和2010连续两年都考察了数的表示(2011没有考),所以单独成为一小节。
本节内容有点难度,并且比较繁杂。
数在机器中的表示有以下几种:原码,反码,补码。
本节重点在掌握原码、反码和补码的概念,熟悉它们相互之间的转换,以及各种编码的运算。
原码、反码、补码的基本概念字节:8各位。
字长:若干个字节。
到底是几个字节?具体看是哪种CPU 。
比如2010普及组第11题就假设一个字长只有一个字节8个位。
下来原码、反码,补码都是建立在机器数在一个字长上的表示。
为了方便理解,我们假设字长为一个字节。
读者要注意事实上为32位CPU 字长为4个字节,64位CPU 字长为8个字节。
原码:首位为符号位,其余为真值。
比如:77的原码表示为:符号位 真值-77的原码表示为:符号位 真值原码总结:特点:简单。
范围:比如字长为8位,则范围为 11111111(-255) 至 01111111(+255)。
缺点:0有两个表示,分别为正零(00000000)和负零(10000000),给计算机计算带来不便。
反码:首位为符号位,其它位分正数和负数两种情况。
反码正数:所有位和原码一样;0 1 0 0 1 1 0 1 1 1 0 0 1 1 0 1反码负数:除了符号位和原码一样,其他位相反。
比如:77的反码表示为01001101;-77的反码表示为10110010。
补码总结:同样0有两个表示,也没有原码简单,补码存在的意义就是为了连接原码和补码。
下来让我们看看补码是怎样的。
补码:分正数和负数两种情况。
补码正数:所有位和反码一样,当然也和原码一样。
所以正数是:原码、反码、补码的表示都一样。
补码负数:等于反码加1。
简单的一句话,其实很麻烦。
比如:77的补码表示为01001101(和原码、反码一致);-77的补码表示为10110011。
加1之后会有进位,因为补码没有符号位,所以负零的补码表示也是00000000。
8位原码反码补码表
***************************************************************************** 对于8位带符号的二进制数:原码:范围-127~-0,+0~+127??????二进制正数00000000-01111111?,??十进制+0~+127,共128种状态??????二进制负数10000000-11111111?,??十进制-0~-127,共128种状态??反码:范围-127~-0,+0~+127??????二进制正数00000000-0?1111111?,??十进制+0~+127,共128种状态??????二进制负数11111111-10000000?,??十进制-127~-0,共128种状态??补码:范围-128~0~+127??????二进制正数?00000000-0?1111111?,??十进制+0~+127,共128种状态??????二进制负数10000000-10000001?,??十进制-128~-1,共128种状态??注:[-0]补码=[-0]反码+1=100000000=[+0]补码,即[-0]补码=[+0]补码[-1]补码=[10000001]补码=11111110+1=11111111,即[-1]补码是-127[-127]补码=[11111111]补码=10000000+1=10000001,即[-127]补码是-1[-128]补码=[-127]补码+[-1]补码=10000001+11111111=10000000结论:原码范围:-127~-0,+0~+127,256种状态反码范围:-127~-0,+0~+127,256种状态补码范围:-128~-1,+0~+127,256种状态,因为[-0]补码和[+0]补码相同,在补码中-128代替了-0。
也可认为是一种规定,这样可都是256种状态。
要注意:(-128)没有相对应的原码和反码,(-128)=*****************************************************************************。
计算机组成原理第6章习题指导
16
16
解: 因为 x = + 11 = 0.1011,y = + 7 = 0.0111
16
16
所以[x]补′ = 00.1011,[ y]补′ = 00.0111
则 [x]补′ + [ y]补′ = 00 .1011
+ 00 .0111 第一位符号位→ 01 .0010
溢出
此时,符号位为“01”,表示溢出,又因第 1 位符号位为“0”,表示结果的真正符号,故“01”表
个负数。
例 6.2 已知:[y]补 求:[-y]补。
解:设 [y]补 = y0.y1y2…yn
第一种情况 [y]补 = 0.y1y2…yn
(6.1)
所以
y = 0.y1y2…yn
故
-y = -0.y1y2…yn
则 [-y]补 = 1.y1y2…yn+2-n
(6.2)
比较式(6.1)和式(6.2),发现由[y]补连同符号位在内每位取反,末位加 1 即可得[-y]补。
-52 -104 -13
右移两位
1,0000110
-6
移位前
1,1100110
-26
左移一位 补
左移两位 码
右移一位
1,1001100 1,0011000 1,1110011
-52 -104 -13
右移两位
1,1111001
-7
移位前
1,1100101
-21,1001011 1,0010111 1,1110010
5
计算机组成原理第 6 章习题
器中一位符号的值要同时送到加法器的两位符号位的输入端。
例 6.16 已知:x = - 0.1110,y = - 0.1101 求:[x·y]原 解: 因为 x = - 0.1110
原码、反码、补码的简单转换
原码、反码、补码的简单转换1、正数的原码、反码、补码是⼀样的如+1011111(95)的原码、反码、补码为:原码 0101 1111反码 0101 1111补码 0101 11112、负数的原码、反码、补码转换以-1011111(-95)的原码、补码、反码的转换为例:(1)负数原码、反码转换符号位不变,数值位按位取反原码转反码原码 1101 1111反码 1010 0000 //符号位不变,数值位按位取反反码转原码反码 1010 0000原码 1101 1111 //符号位不变,数值位按位取反(2)负数原码、补码转换符号位不变,数值位按位取反,末位+1原码转补码原码 1101 1111反码 1010 0000 //符号位不变,数值位按位取反补码 1010 0001 //末位+1快速求法为:符号位不变,从右往左找第⼀个1,这个1左边的取反,右边的不变补码转原码补码 1010 00011101 1110 //符号位不变,数值位按位取反为原码 1101 1111 //末位+1(3)负数反码、补码转换反码转补码,末位+1;补码转反码,末位-1反码转补码反码 1010 0000补码 1010 0001 //末位+1补码转反码补码 1010 0001反码 1010 0000 //末位-13、总结:正数的原码、补码、反码都⼀样;负数的原码、反码转换:符号位不变,数值位按位取反;负数的原码、补码转换:符号位不变,数值位按位取反,末位+1,【快速求法为:符号位不变,从右往左找第⼀个1,这个1左边的取反,右边的不变】;负数的反码、补码转换:反码转补码,末位+1;补码转反码,末位-1。
原码,反码,补码,和取反运算——适用于二进制底层的概念理解
原码,反码,补码,和取反运算——适⽤于⼆进制底层的概念理解⾸先,看这篇⽂章之前,你需要的是不必纠结,⽐如:为什么正数的原码反码补码就⼀样呢,负数的原码反码补码就各不相同呢?看这篇⽂章之前你只需要记住,这是⼈为规定的。
你可能会想,为什么要这样⼈为规定呢,我现在只能告诉你,这样规定有利于计算机底层对数字进⾏操作,也就是说,这种规定对计算机的底层硬件要求简化了,技术实现起来更简单。
我们⽇常⽤的数字是给我们⼈类⽤的,所以叫真值。
⽽机器(计算机)理解的数字通常是⼆进制所组成的数字,所以称为机器数。
⼆进制在内存中以补码形式在其中存储,计算机计算数字是通过补码的形式进⾏计算的,也就是说不管正数,还是负数在计算机⾥⾯,都要⽤补码来表⽰。
在原码,反码,补码中,最⾼位来表⽰正负,⽤0表是正,1表⽰负;如⼗进制的10表⽰为:+1010--->原码:0 1010;-1010--->原码: 1 1010;笔记⼀:原码,反码,补码*规则:正数中:原码=反码=补码;例⼦拿上⾯的:+1010---> 0 1010;+1010--->原码: 0 1010;(最⾼位0表⽰正号)+1010--->反码: 0 1010;+1010--->补码: 0 1010;+1010--->移码: 1 1010(补码符号位取反)负数中的规则如下:例⼦拿上⾯的:-1010---> 1 1010;-1010--->原码: 1 1010;(最⾼位1表⽰负号)-1010--->反码: 1 0101;(符号位不变,数值位:0变1,1变0)-1010--->补码: 1 0110;(符号位不变,数值位:0变1,1变0。
最后得出来的数字再加1。
简单点总结为:“反码加1”)-1010--->移码: 0 0110(补码符号位取反)最后注释:移码:⽆论正负数,都是补码的符号位取反。
还有这⾥解释⼀下,为什么计算机实际计算数字是⽤补码进⾏运算的,如果你看了我上⾯的例⼦的话,应该清楚了,不管是正数,还是负数,在计算机中,补码最⾼位都是1,意思就是说,补码的作⽤,把正数规定还是正数,⽽负数还是负数,但是正负数进⾏运算的时候转变为加法形式,例如:3-5变成3+(-5).这样⼦,计算机底层很容易实现加法运算。
二进制原码、反码和补码-带符号数的机器码表示方法
原码、反码和补码 —— 带符号数的机器码表示方法1.带符号二进制数的表示方法:2、符号位的表示:最常用的表示方法有原码、反码和补码。
(1)原码表示法一个机器数x 由符号位和有效数值两部分组成,设符号位为x 0,x 真值的绝对值|x|=x 1x 2x 3...x n ,则x 的机器数原码可表示为:[x]原= n x x x x ...210,当x>=0时,x 0=0,当x<0时,x 0=1。
例如:已知:x 1=-1011B ,x 2= +1001B ,则x 1,x 2有原码分别是[x 1] 原=11011B ,[x 2]原=01001B规律:正数的原码是它本身,负数的原码是取绝对值后,在最高位(左端)补“1”。
(2)反码表示法一个负数的原码符号位不变,其余各位按位取反就是机器数的反码表示法。
正数的反码与原码相同。
按位取反的意思是该位上是1的,就变成0,该位上是0的就变成1。
即1=0,0=1例:B x 10111-=,B x 10012+=,求反][1x 和反][2x 。
解:反][1x =B 10100,反][2x =B 01001(3)补码表示法首先分析两个十进制数的运算:78-38=41,79+62=141如果使用两位数的运算器,做79+62时,多余的100因为超出了运算器两位数的范围而自动丢弃,这样在做78-38的减法时,用79+62的加法同样可以得到正确结果。
模是批一个计量系统的测量范围,其大小以计量进位制的基数为底数,位数为指数的幂。
如两位十进制数的测量范围是1——9,溢出量是100,模就是102=100,上述运算称为模运算,可以写作:79+(-38)=79+62 (mod 100)进一步写为 -38=62,此时就说 –38的补法(对模100而言)是62。
计算机是一种有限字长的数字系统,因此它的运算都是有模运算,超出模的运算结果都将溢出。
n 位二进制的模是2n ,一个数的补码记作[x]补,设模是M ,x 是真值,则补码的定义如下:⎩⎨⎧<+≥=)0()0(][][x x M x x x 原补例:设字长n=8位,x=-1011011B ,求[x]补。
关于-128,+128,-0,+0,-1的反码补码
关于-128,+128,-0,+0,-1的反码补码⼀.反码的范围反码表⽰法规定:正数的反码与其原码相同。
负数的反码是对其原码逐位取反,但符号位除外。
在规定中,8位⼆进制码能表⽰的反码范围是-127~127。
此时(字长为8位), -128没有原码和反码(只有补码)。
那么,为什么规定字长8位时-128没有原码和反码呢?下⾯解释。
⾸先看-0,[-0]原码=1000 000,其中1是符号位,求反操作,算出[-0]反码=1111 1111,再看-128,假如它有原码且[-128]原码=1000 000,假如让-128也有反码,求反操作,则[-128]反码=1111 1111,你会发现,-128的反码和-0的反码相同,所以为了避免⾯混淆,有了-0的原码,便不能有-128的原码补码,这是8位⽐特位位数限制决定的。
⼆.原码反码补码的范围前提:字长是8位⼆进制数。
原码 -127~127 (-128没有原码反码,原因看前⾯解释~)反码 -127~127补码 -128~127对于n位⼆进制数:你会发现,补码⽐其它码多⼀位,这是为什么呢?问题出在0上。
[+0]原码=0000 0000, [-0]原码=1000 0000[+0]反码=0000 0000, [-0]反码=1111 1111[+0]补码=0000 0000, [-0]补码=0000 0000你会发现,+0和-0的补码是⼀样的。
即 0的补码只有⼀种表⽰。
这⾥解释⼀下[-0]补码是怎么得来的。
负数的补码就是反码整体加⼀。
符号位上的进位舍弃。
(所以,舍弃了符号位的补码的第⼀位是数值位,不是符号位,符号位舍弃了)另外解释⼀下原码符号位和补码符号位的关系,补码的符号位不是保持原码的第⼀位不变,⽽是符号位不变,[-0]反码的第⼀个1是符号位,尾数中的7个1是数值位,尾数加⼀后,数值位产⽣了进位,1111 1111+1=1 0000 0000(计算补码的过程中,并不是先保证第⼀位不变,⽽是保证符号位不变,保证补码规则是反码整体加⼀)。
原码反码与补码
1,表示一个数值要先说明是用多少bit,例如:用8bit表示数值时,(-128)没有相对应的原码和反码, (-128)补码= (1000 0000)同理(2B=16bit)表示:(-32768)补码=(1000 0000 0000 0000),后面回给出证明,因为它是不能简单的用取反加一的方法来求反码的。
2,证明:用(2B=16bit)表示:(-32768)补码=(1000 0000 0000 0000)(1)32767(正数补码与原码相同)是0111 1111 1111 1111(2)-1的补码,其原码取反在加一得1111 1111 1111 1111(3)0111 1111 1111 1111+1000 0000 0000 0000=1111 1111 1111 1111 (4)(令上式x==1000 0000 0000 0000)即:32767+x=-1(5)x=-32768至于用(2B=16bit)表示,取反加一求(-32768)的补码,还望哪个高手指点简单的证明过程。
希望大家以后在被问为什么(-128)补码= (1000 0000),(-32768)补码=(1000 0000 0000 0000)不要在说什么取反加一的话,那样你证明我看看。
给出证明,免得人家不明白还以为你在谈什么高深的话题,结果却是被忽悠了。
3,下面举例说明求负数的补码的补码-1的补码是0xFFFF. 它是这样求的:-1的原码: 1000 0000 0000 0001 ,数值位按位求反: 0xFFFE==1111 1111 1111 1110,末位加1: 0xFFFF==1111 1111 1111 1111现在还按这个补码的求法, 作用在0xFFFF上,0xFFFF : 1111 1111 1111 1111数值位按位求反: 1000 0000 0000 0000末位加1: 1000 0000 0000 0001,这样又得到了-1。
2.5 原码、补码、反码
16/54
计算机中,常对机器数采用原码、反码与补码表示。
使用补码的优点是:
(1)使得符号位能与有效数值 部分一起参加运算,从 而简化运算规则。
(2)使减法运算转换为加法运算,简化计算机中运算 器的线路设计。
对于正数,其原码、反码与补码表示是一
[X]反=
1|X| X<=0 -7:11111000
0不唯一
- 0:11111111
(3)补码: 负数:反码加1,即去-号取反加一
[X]补=
9/54
0X 0<=X +7: 00000111 1|X|+1 X<=0 - 7:11111001
+0:00000000
0唯一
- 0:00000000
举例:假定一个数在机器中占用8位,最高位符号位。
14/54
[例1.21] 计算十进制数“39”与“56”之差
(39)10﹣(56)10 = [39 ]补 + [﹣56 ]补
[39 ]补 = 00100111
[﹣56 ]补 = 11001000
00100111 + 11001000
11101111
-17
结果是否正确??
15/54
计算机中加减法运算统一化成补码的加法运算, 符号位也参与运算。
2020年3月1日
6
补码原理的分析
• “模”的概念:指一个计量系统的计数范围。
• 如时钟计量范围是0~11,模=12。 • 计算机也可以看成一个计量机器,它也有一个计量范 围,即都存在一个
“模”。 • n位存储长度的计算机计量范围是0~2(n)-1,模=2(n)。 • “模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量
8位原码反码补码表
***************************************************************************** 对于8位带符号的二进制数:原码:范围-127~-0,+0~+127??????二进制正数00000000-01111111?,??十进制+0~+127,共128种状态??????二进制负数10000000-11111111?,??十进制-0~-127,共128种状态??反码:范围-127~-0,+0~+127??????二进制正数00000000-0?1111111?,??十进制+0~+127,共128种状态??????二进制负数11111111-10000000?,??十进制-127~-0,共128种状态??补码:范围-128~0~+127??????二进制正数?00000000-0?1111111?,??十进制+0~+127,共128种状态??????二进制负数10000000-10000001?,??十进制-128~-1,共128种状态??注:[-0]补码=[-0]反码+1=100000000=[+0]补码,即[-0]补码=[+0]补码[-1]补码=[10000001]补码=11111110+1=11111111,即[-1]补码是-127[-127]补码=[11111111]补码=10000000+1=10000001,即[-127]补码是-1[-128]补码=[-127]补码+[-1]补码=10000001+11111111=10000000结论:原码范围:-127~-0,+0~+127,256种状态反码范围:-127~-0,+0~+127,256种状态补码范围:-128~-1,+0~+127,256种状态,因为[-0]补码和[+0]补码相同,在补码中-128代替了-0。
也可认为是一种规定,这样可都是256种状态。
要注意:(-128)没有相对应的原码和反码,(-128)=*****************************************************************************。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
说明如下:
***************************************************************************** 对于8位带符号的二进制数:
原码:范围-127~-0,+0~+127
二进制正数 0 0000000-0 1111111 ,十进制+0~+127,共128种状态
二进制负数 1 0000000-1 1111111 ,十进制-0~-127,共128种状态
反码:范围-127~-0,+0~+127
二进制正数 0 0000000-0 1111111 ,十进制+0~+127,共128种状态
二进制负数 1 1111111-1 0000000 ,十进制-127~-0,共128种状态
补码:范围-128~0~+127
二进制正数 0 0000000-0 1111111 ,十进制+0~+127,共128种状态
二进制负数 1 0000000-1 0000001 ,十进制-128~-1,共128种状态
注:
[-0]补码=[-0]反码+1=1 11111111+1= 00000000=[+0]补码,即[-0]补码=[+0]补码
[-1]补码=[1 0000001]补码=1 1111110+1=1 1111111,即[-1]补码是-127
[-127]补码=[1 1111111]补码=1 0000000+1=1 0000001,即[-127]补码是-1
[-128]补码=[-127]补码+[-1]补码 = 1 0000001+1 1111111 =1 0000000
结论:
原码范围:-127~-0,+0~+127,256种状态
反码范围:-127~-0,+0~+127,256种状态
补码范围:-128~-1,+0~+127,256种状态,因为[-0]补码和[+0]补码相同,在补码中-128代替了-0。
也可认为是一种规定,这样可都是256种状态。
要注意:(-128)没有相对应的原码和反码, (-128) = (10000000)
*****************************************************************************。