真值原码反码补码详解和习题 (2)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

原码、反码和补码的概念

本节要求

掌握原码、反码、补码的概念

知识精讲

数值型数据的表示按小数点的处理可分为定点数和浮点数;按符号位有原码、反码和补码三种形式的机器数。

一.计算机中数据的表示方法

1、数的定点与浮点表示

在计算机内部,通常用两种方法来表示带小数点的数,即所谓的定点数和浮点数。

①定点数:是小数点在数中的位置是固定不变的数,数的最高位为符号位,小数点可在符号位之后,也可在数的末尾,小数点本身不需要表示出来,它是隐含的。

缺点:只有纯小数或整数才能用定点数表示;

②浮点数:小数点在数中的位置是浮动的、不固定的数。

一般浮点数既有整数部分又有小数部分,通常对于任何一个二进行制数N,总可以表示成:N=±2P×S

N、P、S均为二进制数,

P为N的阶码,一般为定点整数,常用补码表示,阶码指明小数点在数据中的位置,它决定浮点的表示范围

S为N的尾数,一般为定点小数,常用补码或原码表示,尾数部分给出了浮点数的有效数字位数,它决定了浮点数的精度,且规格化浮点数0.5≤|S|<1;

0.1B=( 1/2 )D =( 2-1)D

0.11B=(1/2 + 1/4 )D =( 2-1+2-2)D

0.111B=(1/2 + 1/4 + 1/8 )D =( 2-1+2-2+2-3)D ---------------------------

在计算机中表示一个浮点数其结构为:

阶符阶数尾符尾数

E f E1E2…E m S f S1S2…S n

假设用八个二进制位来表示一个浮点数,且阶码部分占4位,其中阶符占一位;尾数部分占4位,尾符也占一位。

若现有一个二进制数N=(101100)2可表示为:2110×0.1011,则该数在机器内的表示形式为:101100B= 10110B * (21)D

101100B= 1011B * (22)D

101100B= 101.1B * (23)D

101100B= 10.11B * (24)D

101100B= 1.011B * (25)D

101100B= 0.1011B * (26)D=0.1011B * (2110)B

0 1 1 0 0 1 1 0 1

一个浮点形式的尾数S若满足0.5≤|S|<1,且尾数的最高位数为1,无无效的0,则该浮点数称为规格化数;规格化数可以提高运算的精度。

S为原码表示,则S1=1

规格化数

S为补码表示N为正数,则S1 =1

N为负数,则S1=0

二、原码、反码和补码

1、机器数与真值

机器数:在计算机中数据和符号全部数字化,最高位为符号位,且用0表示正、1表示负,那么把包括符号在内的一个二进制数我们称为机器数,机器数:有原码、反码和补码三种表示方法。

比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。

那么,这里的 00000011 和 10000011 就是机器数。

真值:用“+”、“—”号表示的二进制数。

机器数因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。

例:0000 0001的真值 = +000 0001 = +1,

1000 0001的真值 = -000 0001 = -1

2、原码、反码和补码的概念

1)概念

机器数:有原码、反码和补码三种表示方法。

原码:是最简单的机器数表示法。其数符位用0表示正,1表示负,其余各位表示真值本身。

即用第一位表示符号,其余位表示值,比如如果是8位二进制:

1的原码是00000001,

—1的原码是10000001。

反码:正数的反码同原码,负数的反码为除符号位外,其它各位按位取反。

正数的反码是其本身,负数的反码是在其原码的基础上,符号位不变,其余各个位取反

1的反码是00000001,

—1的反码是11111110。

补码:正数的补码同原码,负数的补码为反码加1。

负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1 1的补码是00000001,

—1的补码是11111110。

2)转换方法

当真值为正数时,原码、反码、补码3种机器数的最高位均为0

当真值为负数时,原码、反码、补码3种机器数的最高位均为1

机器数的最高位为符号位,其它位称为数值位。

当真值为正数时,原码=反码=补码;

当真值为负数时,三种机器数的符号位相同,均为1,原码的数值位保持“原”样,反码的数值位是原码数值位的“按位取反”,补码的数值位是原码的数值位的“按位取反”后再加1,简称“取反加1”。

当真值为负数时:补码= 反码+1

当真值为负数时:原码= [补码]取补补码= [原码]取补

[-x]补=模- [x]补

[x]补=模- [-x]补比如8bit,模= 28=1_0000_0000

例如:(1)假设码长为8位,写出下列数的原码、反码和补码。

根据本题可得到结论:0的原码、反码各有两种表示方法,而补码是唯一的全0表示。

真值+0 -0 +1 -1 +127 -127 -128

原码00000000 10000000 00000001 10000001 01111111 11111111 溢出

反码00000000 11111111 00000001 11111110 01111111 10000000 溢出

补码00000000 00000000 00000001 11111111 01111111 10000001 10000000 二进制定点整数十进制定点整数n位可表示的个数二进制定点小数十进制定点小数

原码11111111~

01111111

-127~+127 2n-1个 1.1111111~

0.1111111

-127/128~

+127/128

反码10000000~

01111111

-127~+127 2n-1个 1.1111111~

0.1111111

-127/128~

+127/128

补码10000000~

01111111

-128~+127

(-128)代替了(-0)

2n个 1.1111111~

0.1111111

-1~-127/128

2-1个;

则可表示的数的个数为2n-1个;n位的二进制数用补码表示,则可表示的数的个数为2n个。

比如:补码中用(-128)代替了(-0)

编程中常用到的32位int类型,可以表示范围是: [-231 ~231 -1] 因为第一位表示的是符号位.而使用补码表示时又可以多保存一个最小值-2G~2G-1

3、算术运算

计算机中的算术运算一般可采用补码进行,用补码表示的两个操作数进行算术运算,符号位可直接参加运算,结果仍为补码。

①定点补码加法运算

运算规则:[x+y]补=[x]取补+[y]补

②定点补码减法运算

运算规则:[x-y]补=[x+(-y)]补=[x]补+[-y]补

[-y]补的求法是将[y]补的各位(包括符号位)全取反,最末位加1。

即将[y]补连同符号位一起取反加1便可得到[-y]补。

[-x]补=模- [x]补

[x]补=模- [-x]补比如8bit,模= 28

如:

[y]补=10001010,则[-y]补=01110110;[-1]补=28 - [1]补=1_0000_0000 - 0000_0001 = 1111_1111

相关文档
最新文档