二进制原码补码反码
- 格式:ppt
- 大小:121.00 KB
- 文档页数:28


⼆进制原码,反码,补码的基础概念和计算⽅法
⼀. 原码, 反码, 补码的基础概念和计算⽅法.
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
让符号位也参与计算, 显然对于减法来说, 结果是不正确的.这也就是为何计算机内部不使⽤ 原码表⽰⼀个数. 如果⽤反码表⽰:
3、带符号的⼆进制数(原码、反码、补码)
1、数值的符号
之前所提到的⼆进制数,没有考虑到符号问题,所指的都是⽆符号数。但实际上数字是有正、负符号的。
以数字6为例,按照习惯的数学表⽰⽅法,正数6⽤+6表⽰,⼆进制为+110;负数6⽤-6表⽰,⼆进制数为-110.但在数字系统中,符号“+”、“-”也要数字化,⼀
般将所对应的⼆进制数最⾼位增加多⼀位⽤来设为符号位,⽤“0”表⽰“+”、⽤“1”表⽰“-”。
为了区分⼀个符号数的“+”、“-”符号数字化前后的两种表⽰⽅法,引⼊真值和机器数两个术语。
真值:在⼀个⼆进制数前⾯⽤“+”、“-”表⽰正、负数的这种⼆进制数叫做真值。
机器数:将“+”、“-”符号⽤⼆进制码“0”、“1”表⽰的⼆进制数叫做机器数。数据最后存到计算机中就是⽤机器数来表⽰的
如下: +6 -> +110 -> 0110
-6 -> -110 -> 1110
(⼗进制数) (真值) (机器数)
在计算机中最⼩基本的计算单位是字节,1字节=8位⼆进制数,由此可见最后存放到计算机中的机器数是8位⼆进制数,不够补0,符号位占据了1⼀个位置,所
以到了最后只有7位数可以使⽤。
在c语⾔中使⽤ unsigned 关键字可以定义⼀个⽆符号的变量,可将变量的存储范围变⼤。
机器数是由符号位+⼆进制数组成的,机器数实际上是个⼤概念,意指这种类型的数据能存进去计算机,机器数在计算机中⼜有三种不同的表⽰⽅法,分别是:
原码、补码、反码。下⾯逐个列举2、原码
将⼆进制数的真值中的正符号⽤0表⽰,负数符号⽤1表⽰,叫做数原码形式,简称原码。
例如:⼗进制为9的数,它的真值形式和原码形式如下所⽰: +9 -> +0001001 -> 0 0001001
-9 -> - 0001001 -> 1 0001001
(⼗进制数) (真值) (原码)
原码⽤8位数码表⽰,最⾼位为符号位。
原码的优点是易于辨认,因为它的数值部分就是该数的绝对值,⽽且与真值和⼗进制数的转换⼗分⽅便。但是在采⽤原码进⾏计算时,运算⽐较是复杂的。
001100二进制的原码反码补码
原码:00001100
反码:00001100
补码:00001100
扩展资料:
原码
原码:是最简单的机器数表示法,用最高位表示符号位,其他位存放该数的二进制的绝对值。
以带符号位的四位二进制数为例:1010,最高位为1表示这是一个负数,其它三位010,即0*2^2+1*2^1+0*2^0=2,所以1010表示十进制数-2。
原码的表示法很简单,虽然出现了+0和-0,但是直观易懂。于是开始运算
0001+0010=0011,1+2=3;
0000+1000=1000,+0+(-0)=-0;
0001+1001=1010,1+(-1)=-2。
于是可以看到其实正数之间的加法通常是不会出错的,因为它就是一个很简单的二进制加法,而正数与负数相加,或负数与负数相加,就要引起莫名其妙的结果,这都是符号位引起的。0分为+0和-0也是因它而起。
原码的特点:
1.原码表示直观、易懂,与真值转换容易。
2.原码中0有两种不同的表示形式,给使用带来了不便。 通常0的原码用+0表示,若在计算过程中出现了-0,则需要用硬件将-0变成+0。
3.原码表示加减运算复杂。
利用原码进行两数相加运算时,首先要判别两数符号,若同号则做加法,若异号则做减法。在利用原码进行两数相减运算时,不仅要判别两数符号,使得同号相减,异号相加;还要判别两数绝对值的大小,用绝对值大的数减去绝对值小的数,取绝对值大的数的符号为结果的符号。可见,原码表示不便于实现加减运算。
四、反码
原码最大的问题就在于一个数加上它的相反数不等于0,于是反码的设计思想就是冲着解决这一点,既然一个负数是一个正数的相反数,那干脆用一个正数按位取反来表示负数。
反码:正数的反码还是等于原码;负数的反码就是它的原码除符号位外,按位取反。
以带符号位的四位二进制数为例:3是正数,反码与原码相同,则可以表示为0011;-3的原码是1011,符号位保持不变,第三位按位取反,所以-3的反码为1100。
计算机中的原码、补码与反码
⼀、原码:
所谓原码就是当前数字的⼆进制表现形式,int为例,第⼀位表⽰符号 (0正数 1负数)简单期间⼀个字节表⽰
+7的原码为: 00000111 -7的原码为: 10000111
对于原码来说,绝对值相等的正数和负数只有符号位不同。
⼆、反码:
正数的反码就是本⾝。负数的反码是⼆进制保留符号位。剩余位取反,⽐如-1的反码是1111 1110;
三、补码:
正数的反码、补码、原码都是⼀样的,负数的补码是在其反码的基础上+1,⽐如-1的补码是1111 1111。
为什么要使⽤补码呢:
我们知道,0是不分正数还是负数的,也就是说,如果使⽤原码表⽰0的话,有两种表⽰⽅式,即00000000与10000000,这对计算来说很不⽅便。
如果我们使⽤补码来表⽰的话:
正数的0的表⽰:
因为正数的原码、反码、补码都是相同的。所以正数0的反码与补码都是00000000;
负数的0的表⽰:
负数的0的原码是10000000,它的补码也就是在其反码的基础上+1,10000000的反码为符号位不变,剩余位取反,即为11111111,再加⼀的话为00000000,这样的话0的正数表⽰与负数表⽰都是00000000。
其实还有⼀个更重要的原因:就是利⽤⾼位溢出,将减法运算变成加法运算。这样可以简化运算的设计:
⽐如计算3-2,我们可以当做3+(-2)来运算:
化为⼆进制:
3:0000 0011;
-2:原码:1000 0010;反码:1111 1101;补码在反码基础上+1,即为:1111 1110
这样3+(-2)的计算为:1000 0010
+ 1111 1110
--------------------
⾼位溢出结果为:0000 0001
在计算机系统中,数值都是以补码来表⽰和存储的。计算机计算过程是 先转换成补码,再按位相加。