补码的计算
二进制原码,反码,补码的基础概念和计算方法
⼆进制原码,反码,补码的基础概念和计算⽅法⼀. 原码, 反码, 补码的基础概念和计算⽅法.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]补⼆. 为何要使⽤原码, 反码和补码计算机可以有三种编码⽅式表⽰⼀个数.对于正数因为三种编码⽅式的结果都相同:[+1] = [00000001]原 = [00000001]反 = [00000001]补但是对于负数:[-1] = [10000001]原 = [11111110]反 = [11111111]补机器可以只有加法⽽没有减法计算⼗进制的表达式: 1-1=0如果⽤原码表⽰:1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2让符号位也参与计算, 显然对于减法来说, 结果是不正确的.这也就是为何计算机内部不使⽤原码表⽰⼀个数. 如果⽤反码表⽰: 1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0⽤反码计算减法, 结果的真值部分是正确的. ⽽唯⼀的问题其实就出现在"0"这个特殊的数值上. 虽然⼈们理解上+0和-0是⼀样的, 但是0带符号是没有任何意义的. ⽽且会有[0000 0000]原和[1000 0000]原两个编码表⽰0. ⽤补码表⽰: 1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补 =[0000 0000]原 =0 这样0⽤[0000 0000]表⽰, ⽽以前出现问题的-0则不存在了.⽽且可以⽤[1000 0000]表⽰-128: (-1) + (-127) = [1000 0001]原 + [1111 1111]原 = [1111 1111]补 + [1000 0001]补 = [1000 0000]补 =-128注:-1-127的结果应该是-128, 在⽤补码运算的结果中, [1000 0000]补就是-128. 但是注意因为实际上是使⽤以前的-0的补码来表⽰-128, 所以-128并没有原码和反码表⽰.(对-128的补码表⽰[1000 0000]补算出来的原码是[0000 0000]原, 这是不正确的) 使⽤补码, 不仅仅修复了0的符号以及存在两个编码的问题, ⽽且还能够多表⽰⼀个最低数. 这就是为什么8位⼆进制, 使⽤原码或反码表⽰的范围为[-127, +127], ⽽使⽤补码表⽰的范围为[-128, 127]. (-1) + (-1) = [1000 0001]原 + [1000 0001]原 = [1111 1111]补 + [1111 1111]补 = [1111 1110]补 //负数原码=补码-1,再同位取反,符号位不变 =[1000 0010]原 =-2因为机器使⽤补码, 所以对于编程中常⽤到的32位int类型, 可以表⽰范围是: [-231, 231-1] 因为第⼀位表⽰的是符号位.⽽使⽤补码表⽰时⼜可以多保存⼀个最⼩值.。
计算机组成原理补码加减法运算
ta越小越好。
由一位全加器(FA)构成的行波进位加法器: 缺点: (1)串行进位,它的运算时间长; (2)只能完成加法和减法两种操作而不能完成逻辑操作。
能否提前产生各位的进位输入? 使得各位的加法运算能并行起来,即可提高多位加法器运算速度
0 .1 0 1 0 1
[x]补 + [y]补
0. 1 0 1 1 0. 1 0 0 1
+ 0 .0 1 0 0 0
[x+y]补 1. 0 1 0 0
0 .1 1 1 0 1
两个正数相加的结果成为负数,这显然是错误的。
正常结果
例:x= -0.1101, y= -0.1011, 求x+y。
解:
[x]补=1.0011
101
0
1
110
0
1
111
1
1
计算机组成原理
Ci+1
Si
FA
Ci
Ai Bi
一位全加器
16
16
逻辑方程
Si Ai Bi Ci
Ci1 Ai Bi ( Ai Bi )Ci Ci+1
Si
≥1
=1
Si
&
ImNaoge
C i+1
FA
Ci
&
=1
Ai Bi 逻辑符号
计算机组成原理
Ci
Ai Bi
17
17
C2 = A2B2+(A2⊕B2) C1=G2+P2C1 =G2+P2(G1+P1C0) =G2+P2G1+P2P1C0
计算机减法的实现(原码、反码、补码)
总结一句话:减法——补码相加再求补。
小例子(提示:正数原码的补码是本身):.使用补码计算表达式:1 - 1 = 01-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原不懂的就请继续看就明白了!这本来就是大一的时候就开始学习的,但是之后一直没再接触。
一接触但有概念而没有一个清晰的过程,所以再次缕清了后记录一下博客。
本文重点阐明了计算机中减法运算的实现以及反码、补码的意义。
对于加法来说,计算机很容易实现,举例:8 + 6 = 14;在计算机中,也就是0000 10000000 0110.------------------------0000 11100000 1110表示的则就是14. 没毛病那么减法呢?举例: 8 - 6 = 2;在计算机怎么实现?首先int型在当前的计算机中大多数是占了32位,这里我们为了简便,就当作8位来处理(注意最高位是符号位,也就是8位的数据表示范围是:-128~127)在计算机的逻辑运算单元中,只有加法运算器,用来对两个数进行相加,并没有减法器的电路。
因为对于减法运算,计算机也是用加法器来实现的,比如8 - 6,也可以表示成 8 +(-6),这样就变成了加法运算,问题变成了怎么让计算机表示出负数,有的朋友可能想:6是0000 0110,变成负数后不就是1000 0110了么,这的确没错。
但是这样的表示并不能被加法器所支持,加法器是不知道负数的,尽管我们把最高一位定义成了符号位。
8的二进制是 0000 1000-6的二进制是1000 01100000 10001000 0110.--------------1000 1110而1000 1110表示的是-14,这显然不是我们要的结果。
那么换一个思路,我们知道,现在我们举例的是8位数,最高的表示是127.举个时钟的例子。
补码加减法运算
[-y]补=0.0110
[x]补 + [-y]补
[x-y]补
计算机组成原理
1.0 0 1 1 0.0 1 1 0 1.1 0 0 1
∴x -y = - 0.0111
6
溢出及与检测方法
1.概念
在定点小数机器中,数的表示范围为|x|<1。在运算过程中如出现大于1
的现象,称为 “溢出”。
下溢
上溢
机器定点小数表示
T通常采用一个 “与非”门或一 个“或非”门的 时间延迟来作为 度量单位。
20
(1)对一位全加器(FA)来说,Si的时间延迟为6T(每级异或门延迟3T); Ci+1的时间延迟为5T。
Ci+1
Si
≥1
=1
&
&
=1
计算机组成原理
Ci
Ai Bi
21
(2)n位行波进位加法器的延迟时间ta为: 考虑溢出检测时,有: ta=n·2T+9T=(2n+9)T
发生溢出的原因,是因为运算结果超出编码所能表示的数字大小。 两个正数相加: 结果大于机器所能表示的最大正数,称为上溢; 两个负数相加:结果小于机器所能表示的最小负数,称为下溢。
计算机组成原理
7
例:x=+0.1011, y=+0.1001, 求x+y。
解:
[x]补=0.1011
[y]补=0.1001
计算机组成原理
补码加减法运算
2020年5月26日
计算机组成原理
1
补码加减法运算
1.原码加/减法运算
加法规则: 先判符号位,若相同,绝对值相加,结果符号不变; 若不同,则作减
法, |大| - |小|,结果符号与|大|相同。 减法规则:
c++ 补码算法
7-27-3-c++ 补码算法
以下是计算C++中的二进制补码的简单算法:
1. 正整数的二进制补码:
•正整数的二进制补码与其正常的二进制表示完全相同。
例如,十进制数+5的二进制补码表示也是+5,因为它是正数。
2. 负整数的二进制补码:
•首先,将负整数的绝对值转换为二进制。
•然后,将二进制表示的每一位取反,即0变为1,1变为0。
•最后,将取反后的二进制数加1。
下面是一个示例,展示如何计算一个负数的二进制补码:
假设要计算-5的二进制补码:
1. 将5的二进制表示是:0000 0101。
2. 取反:1111 1010。
3. 加1:1111 1011。
所以,-5的二进制补码是1111 1011。
C++中的计算不需要手动执行这些步骤,因为整数类型已经以补码的形式存储。
你可以直接使用负数,而C++将会自动处理补码的计算。
注意:二进制补码仅适用于整数,不适用于浮点数。
对于浮点数,有不同的表示方式,例如IEEE 754标准。
1/ 1。
原码、反码、补码的求法
反码在计算机内,定点数有3种表示法:原码、反码和补码。
所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
1、原码、反码和补码的表示方法(1)原码:在数值前直接加一符号位的表示法。
例如:符号位数值位[+7]原= 0 0000111 B[-7]原= 1 0000111 B注意:a. 数0的原码有两种形式: [+0]原=00000000B [-0]原=10000000Bb. 8位二进制原码的表示范围:-127~+127(2)反码:正数:正数的反码与原码相同。
负数:负数的反码,符号位为“1”,数值部分按位取反。
例如:符号位数值位[+7]反= 0 0000111 B[-7]反=1 1111000B注意:a.数0的反码也有两种形式,即 [+0]反=00000000B[- 0]反=11111111Bb. 8位二进制反码的表示范围:-127~+127(3)补码的表示方法1)模的概念:把一个计量单位称之为模或模数。
例如,时钟是以12进制进行计数循环的,即以12为模。
在时钟上,时针加上(正拨)12的整数位或减去(反拨)12的整数位,时针的位置不变。
14点钟在舍去模12后,成为(下午)2点钟(14=14-12=2)。
从0点出发逆时针拨10格即减去10小时,也可看成从0点出发顺时针拨2格(加上2小时),即2点(0-10=-10=-10+12=2)。
45的补码计算过程
45的补码计算过程
补码是计算机中常用的一种二进制表示法,它是一种反码的变形,用于表示负数。
下面我们就来计算45的补码。
首先,我们要将45转换成二进制,45的二进制表示为101101。
接下来,我们要将101101取反,即取反后的结果为010010。
最后,我们要将010010加1,即加1后的结果为010011,这就是45的补码。
总结一下,45的补码的计算过程是:首先将45转换成二进制,然后将二进制取反,最后将取反后的结果加1,即可得到45的补码。
补码是计算机中常用的一种二进制表示法,它可以用来表示负数,并且可以用来实现加减法运算。
本文介绍了45的补码计算过程,即将45转换成二进制,然后将二进制取反,最后将取反后的结果加1,即可得到45的补码。
2的补码算术
2的补码算术
摘要:
1.补码的概念
2.补码的计算方法
3.补码的应用
4.2 的补码算术的实际应用
正文:
计算机中,数的表示方式有多种,补码是其中一种重要的表示方式。
补码的概念,简单来说,就是将一个有符号整数转换为它的二进制补码,使得负数的补码和正数的补码在数值上相等,但符号位不同。
这种表示方式可以方便地进行加减运算,特别是在计算机中进行运算时,可以简化运算的流程。
补码的计算方法是:对于正数,它的补码就是它本身;对于负数,它的补码是它的反码加1。
例如,对于-3,它的反码是11111011,加1 后得到11111100,这就是-3 的补码。
补码的应用广泛,特别是在计算机中进行有符号数的加减运算时。
通过补码的运算,可以方便地处理负数,简化运算的流程。
2 的补码算术是补码运算中的一种,主要用于计算机中对2 的幂次的计算。
例如,计算2 的10 次方,通过2 的补码算术,可以得到结果1024。
这种计算方式在计算机中非常常用,可以大大提高计算效率。
总的来说,补码是计算机中重要的数的表示方式,它可以方便地处理负数,简化运算的流程。
补码的计算——精选推荐
补码的计算
在计算机中,数值是以⼆进制补码形式存储的,java 也不例外。
8 位⼆进制补码的范围为 -128~127(-27 ~ 27 - 1);byte 的范围就是 8 位⼆进制补码的范围。
那么,问题来了。
8 位⼆进制补码为什么能表⽰ -128 呢?
补码中第⼀位是符号位,只有剩下的七位是数值位,即
数值位全为 1 时,最⼤值为 -27 - 1 ,即 -127;如果再加 1 就会发⽣溢出变成 1000 0000。
在补码中只有⼀个 0 ,即 0000 0000,+0;⽽ -0 ,1000 0000 在补码中规定⽤来表⽰ -128,也就是补码中的⼀种 数码结合 形式,符号位也表⽰数值位。
上⾯只是说规定 1000 0000 表⽰ -128,那么, -128 的补码可以通过计算出来吗?
答案是可以的,我们可以通过⽆符号数来计算出补码(⽆符号数的补码原码和反码都是⼀样的)。
有符号数可以通过模运算来获得对应的⽆符号数(n 位⼆进制数的模为 2n,即 8 位⼆进制数的模为 256):
当 0<= x <= 27 时,x⽆ = x
当 -27 <= x < 0 时,x⽆ = x + 28
参考链接:。
补码的运算
1. 与手工二进制运算的方法相同(指运算电路)。 2. 可以用十六进制数的运算代替二进制数的运算,计 算时不容易出错,而且快捷。
三、原码表示法(带符号数)
1. 正数。最高位是符号位用“0”表示正号,即15~0 位的第15位为“0”,7~0位的第7位为“0” 。 2. 负数。最高位是符号位用“1”表示负号,即15~0 位的15位为“1” ,7~0位的7位为“1” 。
例如,两位十进制计数器,它的计数容量是00—99,模=100。 时钟的计数容量是0—11,模=12。
[X]补数=模-X 如,模=100 X=25 [X]补数=100-25=75 若:65-25=40 则可以:65+[25]补数=65+75=140=40
练习:模是100,计算6-3=3,用补数的加法实现。 模是12,计 算6-3=3,用补数的加法实现。
例如,+20的原码是0001 0100, -20的原码是1001 0100。
练习:已知真值分别为+64、-64、+127、-127,求原码。
求原码的方法:先将真值转换成二进制数,再写成固 定的8位或16位,最高位用“0”或“1”表示数的正 号或负号。计算机就是以这种方法表示。真值就是带 符号的十进制数,如,+20 -20,+120,-120。
求反码的方法:正数不用求反码,正数的原码等于反 码。负数的反码是以负数的原码再求反码。
练习:已知真值分别为+64、-64、+127、-127,求反码。 解:64的二进制数是0100 0000,则, [+64]原码=0100 0000 (40H),[-64]原码= 1100 0000 (C0H)。 [+64]反码= 0100 0000 (40H),[-64]反码= 1011 1111 (BFH)。
计算机补码计算方式
正数(符号位为0的数)补码与原码相同.
负数(符号位为1的数)变为补码时符号位不变,其余各项取反,最后在末尾+1
例如:原码01100110,补码为:01100110
原码11100110,先变反码:10011001,再加1变为补码:10011010
计算机中的符号数有三种表示方法,即原码、反码和补码。
三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。
所以你的8位整数:10111101b 中,字母“b”应该是二进制数的提示。
符号位为1,表示该数为负数,应该先减1,再取反,符号位不变,
结果为:11000011,十进制数为:-67。
原码、反码、补码的求法
同理,计算机的运算部件与寄存器都有一定字长的限制(假设字长为8),因此它的运算也是一种模运算。当计数器计满8位也就是256个数后会产生溢出,又从头开始计数。产生溢出的量就是计数器的模,显然,8位二进制数,它的模数为28=256。在计算中,两个互补的数称为“补码”。
2)补码的表示:
正数:正数的补码和原码相同。
在此,仅以负数情况分析。
(1) 已知原码,求补码。
例:已知某数X的原码为10110100B,试求X的补码和反码。
解:由[X]原=10110100B知,X为负数。求其反码时,符号位不变,数值部分按位求反;求其补码时,再在其反码的末位加1。
1 0 1 1 0 1 0 0 原码
2)(-83)+(-80)=?
1 0 1 0 1 1 0 1 B -83
+ 1 0 1 1 0 0 0 0 B -80
0 1 0 1 1 1 0 1 B +93
思考:这两个题目,按照正常的法则来运算,但结果显然不正确,这是怎么回事呢?
答案:这是因为发生了溢出。
如果计算机的字长为n位,n位二进制数的最高位为符号位,其余n-1位为数值位,采用补码表示法时,可表示的数X的范围是 -2n-1≤X≤2n-1-1
反码
在计算机内,定点数有3种表示法:原码、反码和补码。
所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
原码、反码、补码的求法
1 0 1 0 1 1 0 1 B -83
+ 1 0 1 1 0 0 0 0 B -80
0 1 0 1 1 1 0 1 B +93
思考:这两个题目,按照正常的法则来运算,但结果显然不正确,这是怎么回事呢?
答案:这是因为发生了溢出。
如果计算机的字长为n位,n位二进制数的最高位为符号位,其余n-1位为数值位,采用补码表示法时,可表示的数X的范围是 -2n-1≤X≤2n-1-1
当n=8时,可表示的有符号数的范围为-128~+127。两个有符号数进行加法运算时,如果运算结果超出可表示的有符号数的范围时,就会发生溢出,使计算结果出错。很显然,溢出只能出现在两个同符号数相加或两个异符号数相减的情况下。
对于加法运算,如果次高位(数值部分最高位)形成进位加入最高位,而最高位(符号位)相加(包括次高位的进位)却没有进位输出时,或者反过来,次高位没有进位加入最高位,但最高位却有进位输出时,都将发生溢出。因为这两种情况是:两个正数相加,结果超出了范围,形式上变成了负数;两负数相加,结果超出了范围,形式上变成了正数。
在n位的机器数中,最高位为符号位,该位为零表示为正,为一表示为负;其余n-1位为数值位,各位的值可为零或一。当真值为正时,原码、反码、补码数值位完全相同;当真值为负时,原码的数值位保持原样,反码的数值位是原码数值位的各位取反,补码则是反码的最低位加一。注意符号位不变。
总结:提示信息不要太少,可“某某数的反码是某某”,而不是只显示数值。
反码 在计算机内,定点数有3种表示法:原码、反码和补码。
所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
负19的补码计算过程
负19的补码计算过程补码是一种用于表示有符号数的方法,它可以将负数和正数统一起来,方便计算机对数字进行运算。
在计算机中,负数的补码表示方式是使用最高位作为符号位,0代表正数,1代表负数。
补码的计算过程包括两个步骤:取反和加一。
我们需要将19转换成二进制表示。
19的二进制表示为10011。
然后,我们需要将二进制表示取反,即将0变为1,将1变为0。
取反得到的结果为01100。
最后,将取反的结果加一,得到负19的补码表示为01101。
负数的补码表示方式可以通过以下步骤得到:1. 将负数的绝对值转换为二进制表示。
2. 对二进制表示进行取反。
3. 将取反的结果加一。
负19的补码计算过程如下:1. 将19转换为二进制表示:10011。
2. 对二进制表示取反:01100。
3. 将取反的结果加一:01101。
通过以上计算过程,我们得到了负19的补码表示为01101。
负数的补码表示方式在计算机中具有很大的作用。
它可以简化计算机对负数的处理过程,并且可以统一正数和负数的表示方式。
在计算机中,负数的补码表示方式是广泛使用的一种表示方法。
补码的计算过程虽然简单,但是需要注意几个关键点。
首先,取反和加一的顺序是固定的,不能颠倒。
其次,计算补码时需要确定补码位数,一般为计算机的字长。
最后,需要注意补码的符号位是固定的,不会改变。
总结一下,负数的补码是一种用于表示负数的编码方式,它可以通过对正数的二进制表示取反并加一来得到。
负数的补码表示可以统一正数和负数的表示方式,并且在计算机中有广泛的应用。
对于负19的补码计算过程,我们将19转换为二进制表示后进行取反和加一,最终得到负19的补码表示为01101。
补码的计算过程需要注意几个关键点,包括取反和加一的顺序、补码位数的确定以及补码的符号位不变等。
负数的补码表示方式在计算机中具有重要的作用,它可以简化负数的处理过程,使计算机能够统一处理正数和负数。
纯整数补码表示范围计算
纯整数补码表示范围计算
纯整数补码表示是计算机中常用的一种数值表示方式,它可以表示负数和正数,并且可以进行加减乘除等基本运算。
在纯整数补码表示中,采用补码表示负数,其范围计算方法如下:
假设采用n位二进制表示数字,其中最高位为符号位,0表示正数,1表示负数。
则在n位二进制中,可以表示的整数范围为:
- 对于无符号整数,其范围为0~2^n-1;
- 对于有符号整数,其范围为-2^(n-1)~2^(n-1)-1。
例如,对于8位二进制表示,其可以表示的整数范围为:
- 无符号整数:0~255;
- 有符号整数:-128~127。
在纯整数补码表示中,负数采用补码表示,其计算方法为:将原码按位取反并加1。
例如,-3的原码为10000011,按位取反得到01111100,再加1得到01111101,即-3的补码表示为01111101。
这样,通过补码表示,可以简化负数的运算,并且可以避免出现负数的溢出问题。
总之,纯整数补码表示在计算机中具有广泛的应用,掌握其范围计算方法和补码表示方法对于理解计算机底层运算有重要意义。
- 1 -。
45的补码计算过程
45的补码计算过程45的补码,又被称作反码,是一种用于数值运算的表示方法。
它是将计算机中数据的声明、储存和传输过程中常用的两种补码形式之一。
补码是计算机中的科学运算中的一种重要的表示形式,是由有符号数表示(原码)所演变而成的一种表示方式。
45的补码计算过程可以分成几个步骤:首先,将45的二进制原码表示:0000 0000 0010 1101,该码的最高位为0,所以是正数;其次,求45的反码,将原码按位取反:1111 1111 1101 0010;接着,求45的补码,将反码最后一位加1:1111 1111 1101 0011;最后,45的补码1111 1111 1101 0011表示为有符号十进制数时,仍是45,即-45。
45的补码计算过程非常简单,需要掌握的主要知识点有:二进制的原码、反码和补码的计算过程及相互之间的关系。
而对于有符号数,只用原码表示,原码、反码和补码都是一样的,而对于无符号数,只用补码表示,原码和补码是一样的。
45的补码运算,只需轻松掌握几个基本概念,就可以轻松完成。
45的补码计算进行到最后,在计算机中以有符号二进制数的表示方式45的数值是-45。
除了45的补码计算外,其他的有符号数的补码计算,例如-8的补码计算,也是运用上述的思路进行的。
-8的补码,经过原码、反码、补码的计算,最终以有符号二进制数的表示方式为1000 0000 00001000(即-8)。
以上介绍的只是45的补码计算过程,实际上,补码运算还有许多其它的具体应用,例如浮点数计算、计算机系统中的字长对齐等等。
此外,补码计算在计算机运算中还可以用于操作符的实现。
总之,45的补码计算过程是一种非常重要的运算方法,它不仅是计算机数据储存过程中常用的两种补码形式之一,而且在实际的计算中也是非常常用的。
如果我们能够更好地理解它们的原理,将会帮助我们更好地理解计算机科学的本质所在。
6-12补码运算
6-12补码运算
二进制的补码计算非常简单,各种教材中也经常使用二进制来说明源码、反码与补码三者的关系,掌握一定基础的人都知道一下规则:最高位为符号位,0表示正数,1表示负数。
1.2 反码最高位为符号位,0表示正数,1表示负数。
正数的反码等于本身,负数的反码除符号位外,各位取反:1.3 补码最高位为符号位,0表示正数,1表示负数。
正数的补码等于本身,负数的补码等于反码+1:2、十进制的补码计算方法对于十进制数来说,通过前面的性质不难得到正十进制数补码等于其本身,对于负十进制数来说如果还按位进行运算就太麻烦了!为了讲明白,我们从补码的起因说起:“反码加一”只是补码所具有的一个性质,不能被定义成补码。
负数的补码,是能够和其相反数相加通过溢出从而使计算机内计算结果变为0的二进制码。
这是补码设计的初衷,具体目标就是让1+(-1)=0,这利用原码是无法得到的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
补码的计算
8位数采用补码表示法的取值范围是-128~127,如果计算结果超出这个范围就会产生溢出,例如有符号数加法溢出:
如何判定溢出:我们还是分四种情况讨论:如果两个正数相加溢出,结果一定是负数;如果两个负数相加溢出,结果一定是正数;一正一负相加,无论结果是正是负都不可能溢出。
从上图可以得出结论:在相加过程中最高位产生的进位和次高位产生的进位如果相同则没有溢出,如果不同则表示有溢出。
逻辑电路的实现可以把这两个进位连接到一个异或门,把异或门的输出连接到溢出标志位。
无符号数加法进位:
如果把这两个操作数看作有符号数-126和-8相加,计算结果是错的,因为产生了溢出;但如果看作无符号数130和248相加,计算结果是122进1,也就是122+256,这个结果是对的。
计算机的加法器在做完计算之后,根据最高位产生的进位设置进位标志,同时根据最高位和次高位产生的进位的异或设置溢出标志。
至于这个加法到底是有符号数加法还是无符号数加法则取决于程序怎么理解了,如果程序把它理解成有符号数加法,下一步就要检查溢出标志,如果程序把它理解成无符号数加法,下一步就要检查进位标志。
通常计算机在做算术运算之后还可能设置另外两个标志,如果计算结果的所有位都是零则设置零标志,如果计算结果的最高位是1则设置负数标志,如果程序把计算结果理解成有符号数,也可以检查负数标志判断结果是正是负。