kl800.com省心范文网

原码、补码和反码


原码、补码和反码
在计算机内,定点数有 3 种表示法:原码、反码和补码 所谓原码就是二进制定点表示法,即最高位为符号位,“0”表示 正,“1”表示负,其余位表示数值的大小。 反码表示法规定:正数的反码与其原码相同;负数的反码是对其 原码逐位取反,但符号位除外。 补码表示法规定:正数的补码与其原码相同;负数的补码是在其 反码的末位加 1。

1、原码、反码和补码的表示方法
(1)原码:在数值前直接加一符号位的表示法。 例如: 符号位 数值位

[+7]原= 0 0000111 B [ -7]原= 1 0000111 B 注意:a. 数 0 的原码有两种形式: [+0]原=00000000B [-0]原=10000000B b. 8 位二进制原码的表示范围:-127~+127 (2)反码: 正数:正数的反码与原码相同。 负数:负数的反码,符号位为“1”,数值部分按位取反。 例如: 符号位 数值位 [+7]反= 0 0000111 B

[-7]反= 1 1111000 B 注意:a. 数 0 的反码也有两种形式,即 [+0]反=00000000B [- 0]反=11111111B b. 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) 。因此,在模 12 的前 提下,-10 可映射为+2。由此可见,对于一个模数为 12 的循环系统来 说,加 2 和减 10 的效果是一样的;因此,在以 12 为模的系统中,凡 是减 10 的运算都可以用加 2 来代替,这就把减法问题转化成加法问 题了(注:计算机的硬件结构中只有加法器,所以大部分的运算都必 须最终转换为加法) 。10 和 2 对模 12 而言互为补数。 同理,计算机的运算部件与寄存器都有一定字长的限制(假设字长为 8) ,因此它的运算也是一种模运算。当计数器计满 8 位也就是 256 个 数后会产生溢出,又从头开始计数。产生溢出的量就是计数器的模, 显然,8 位二进制数,它的模数为 28=256。在计算中,两个互补的数 称为“补码”。

2)补码的表示: 正数:正数的补码和原码相同。 负数:负数的补码则是符号位为“1”,数值部分按位取反后再在 末位(最低位)加 1。也就是“反码+1”。 例如: 符号位 数值位

[+7]补= 0 0000111 B [-7]补= 1 1111001 B 补码在微型机中是一种重要的编码形式,请注意: a. 采用补码后,可以方便地将减法运算转化成加法运算,运算过 程得到简化。正数的补码即是它所表示的数的真值,而负数的补码的 数值部份却不是它所表示的数的真值。采用补码进行运算,所得结果 仍为补码。 b. 与原码、反码不同,数值 0 的补码只有一个,即 [0]补=00000000B。 c. 若字长为 8 位,则补码所表示的范围为-128~+127;进行补码 运算时,应注意所得结果不应超过补码所能表示数的范围。

2.原码、反码和补码之间的转换
由于正数的原码、补码、反码表示方法均相同,不需转换。 在 此,仅以负数情况分析。 (1)已知原码,求补码。 例:已知某数 X 的原码为 10110100B,试求 X 的补码和反码。 解:由[X]原=10110100B 知,X 为负数。求其反码时,符号位不变,

数值部分按位求反;求其补码时,再在其反码的末位加 1。 1 0 1 1 0 1 0 0 原码 1 1 0 0 1 0 1 1 反码,符号位不变,数值位取反 +1 1 1 0 0 1 1 0 0 补码 故:[X]补=11001100B,[X]反=11001011B。 (2) 已知补码,求原码。 分析:按照求负数补码的逆过程,数值部分应是最低位减 1,然后取 反。但是对二进制数来说,先减 1 后取反和先取反后加 1 得到的结果 是一样的,故仍可采用取反加 1 有方法。 例:已知某数 X 的补码 11101110B,试求其原码。 解:由[X]补=11101110B 知,X 为负数。求其原码表示时,符号位不 变,数值部分按位求反,再在末位加 1。 1 1 1 0 1 1 1 0 补码 1 0 0 1 0 0 0 1 符号位不变,数值位取反 +1 1 0 0 1 0 0 1 0 原码

3. 有符号数运算时的溢出问题
请大家来做两个题目: 1) (+72)+(+98)=? 0 1 0 0 1 0 0 0 B +72 + 0 1 1 0 0 0 1 0 B +98 1 0 1 0 1 0 1 0 B -42

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 当 n=8 时,可表示的有符号数的范围为-128~+127。两个有符号 数进行加法运算时,如果运算结果超出可表示的有符号数的范围时, 就会发生溢出,使计算结果出错。很显然,溢出只能出现在两个同符 号数相加或两个异符号数相减的情况下。 对于加法运算,如果次高位(数值部分最高位)形成进位加入最 高位,而最高位(符号位)相加(包括次高位的进位)却没有进位输 出时,或者反过来,次高位没有进位加入最高位,但最高位却有进位 输出时,都将发生溢出。因为这两种情况是:两个正数相加,结果超 出了范围,形式上变成了负数;两负数相加,结果超出了范围,形式 上变成了正数。 而对于减法运算,当次高位不需从最高位借位,但最高位却需借 位(正数减负数,差超出范围) ,或者反过来,次高位需从最高位借 位,但最高位不需借位(负数减正数,差超出范围) ,也会出现溢出。

原码、反码、补码有什么用? 假设有一 int 类型的数,值为 5,那么,我们知道它在计算机中 表示为: 00000000 00000000 00000000 00000101 5 转换成二制是 101,不过 int 类型的数占用 4 字节(32 位) ,所 以前面填了一堆 0。 现在想知道,-5 在计算机中如何表示? 在计算机中,负数以其正值的补码形式表达。 什么叫补码呢?这得从原码,反码说起。 原码: 一个整数, 按照绝对值大小转换成的二进制数, 称为原码。 比如 00000000 00000000 00000000 00000101 是 5 的 原码。 反码: 将二进制数按位取反, 所得的新二进制数称为原二进制数 的反码。 取反操作指:原为 1,得 0;原为 0,得 1。 变 0; 0 变 1) (1 比如:将 00000000 00000000 00000000 00000101 每一位取反, 得 11111111 11111111 11111111 11111010。 称: 11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。 反码是相互的,所以也可称: 11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互为反码。 补码:反码加 1 称为补码。

也就是说,要得到一个数的补码,先得到反码,然后将反码加上 1,所得数称为补码。 比 如 : 00000000 00000000 00000000 00000101 的 反 码 是 : 11111111 11111111 11111111 11111010。 那么,补码为: 11111111 11111111 11111111 11111010 1 = 11111111 11111111 11111111 11111011 所 以 , -5 在 计 算 机 中 表 达 为 : 11111111 11111111 11111111 11111011。转换为十六进制:0xFFFFFFFB。

再举一例,我们来看整数-1 在计算机中如何表示。 假设这也是一个 int 类型,那么: 1、先取 1 的原码:00000000 00000000 00000000 00000001 2、得反码: 11111111 11111111 11111111 11111110 3、得补码: 11111111 11111111 11111111 11111111 正数的原码,补码,反码都相同,都等于它本身 负数的补码是:符号位为 1,其余各位求反,末位加 1 反码是:符号位为 1,其余各位求反,但末位不加 1 也就是说,反码末位加上 1 就是补码 1100110011 原 1011001100 反 除符号位,按位取反 1011001101 补 除符号位,按位取反再加 1

正数的原反补是一样的 在计算机中,数据是以补码的形式存储的: 在 n 位的机器数中,最高位为符号位,该位为零表示为正,为 1 表示为负; 其余 n-1 位为数值位,各位的值可为 0 或 1。 当真值为正时:原码、反码、补码数值位完全相同; 当真值为负时: 原码的数值位保持原样, 反码的数值位是原码数值位的各位取反, 补码则是反码的最低位加一。 注意符号位不变。 如:若机器数是 16 位: 十进制数 17 的原码、反码与补码均为: 0000000000010001 十进制数-17 的原码、反码与补码分别为:1000000000010001、 1111111111101110、1111111111101111


原码,反码,补码及运算.doc

原码,反码,补码及运算 - 原码,反码,补码及运算 一、定义 1.原码 正数的符

原码反码和补码_图文.ppt

原码的表示范围为+(2 -1)~- (2 -1),若n=8,则为+127~-127 原码反码和补码 反码 定义: 符号位的用法及正数的表示与“原码” 相同;负数的表示是在“...

记忆和转换原码、反码、补码和移码其实很简单!.doc

记忆和转换原码反码补码和移码其实很简单! - 记忆和转换原码反码补码和移码其实很简单! 最近在备战软考,复习到计算机组成原理的时候,看到书中关于原码、...

计算机中的原码、补码和反码.txt

在计算机内,定点数有3种表示法:原码反码和补码 所谓原码就是前面所介绍的二进制

原码补码反码_图文.ppt

原码补码反码 - 3.1.1 数值型数据的表示和转换 在计算机系统中,常用的几种

什么是原码、反码、补码.txt

什么是原码、反码补码 - 一. 机器数和真值 在学习原码, 反码和补码之前,

为什么要使用原码、反码、补码.doc

为什么要使用原码反码补码 - 对汇编中原码反码和补码的介绍。... 为什么要使用原码反码补码_工学_高等教育_教育专区。对汇编中原码反码和补码的介绍。 ...

2、原码、反码、补码的定义.doc

2、原码反码补码的定义 - 数值在计算机中的表示 1.二进制位与字节 二进制

2.5原码、补码和反码_图文.ppt

2.5原码补码和反码 - 2.5原码补码和反码 卢婷婷 2.5.1 机器数和

原码、补码和反码.txt

原码补码和反码 - (1)原码表示法 原码表示法是机器数的一种简单的表示法。其

原码、反码、补码和移码的公式归纳.doc

原码反码补码和移码的公式归纳 - 原码反码补码和移码的公式归纳 最近在备战软考,复习到计算机组成原理的时候,看到书中关于原码反码补码和移码的定义,...

原码、反码与补码知识讲解.doc

原码反码与补码知识讲解 - 整数的原码反码补码之间的关系和转化方法,位运算

计算机中的原码、反码和补码.doc

计算机中的原码反码和补码_IT/计算机_专业资料。讲述计算机中原码反码和补码之间的欢喜 补码 补码 补码(two's complement) 1、在计算机系统中,数值一律用补码来...

原码、反码、补码的换算.doc

原码、反码、补码的换算 - C 语言中,原码,补码和反码怎么换算? 语言中,原码,补码和反码怎么换算? 原码、反码、补码都是有符号定点数的表示方法。 一个有符号...

原码-反码-补码及运算.doc

原码-反码-补码及运算 - (四川大学2016内部授课资料)... 注意:(-128)没有相对应的原码和反码, (-128) = (10000000) 补码的加减运算如下: ( 1 ) 10- ( ...

计算机原理(原码、反码、补码).doc

计算机原理(原码、反码补码) - 计算机原理- 整数的补码,原码, 反码 解释

原码补码和反码的具体定义.doc

原码补码和反码的具体定义 - 原码补码和反码的具体定义 数在计算机中是以二进制形式表示的。 数分为有符号数和无符号数。 原码、反码、补码都是有符号定点数的...

原码反码和补码.doc

原码反码和补码_电脑基础知识_IT/计算机_专业资料。原码,反码和补码的介绍,其中也介绍了关于10000000的代表-257的介绍 原码, 反码和补码本篇文章讲解了计算机的原码...

二进制数的原码、反码及补码表示.doc

二进制数的原码反码补码表示 - (注意:理解的彻底这里) 二进制数的原码反码补码表示 1、机器数与真值 机器数:数在机器中的编码表示。 真值:一般书写...

2.5 原码、补码和反码.doc

2.5 原码补码和反码 - 课时数 NO: : 教学 内容 教学 目的 要求