真值原码反码补码详解和习 题

  • 格式:pdf
  • 大小:295.46 KB
  • 文档页数:13

下载文档原格式

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

(2)假设码长为8位,写出原码、反码和补码所能表示定点整数和 定点小数的范围。
二进制定点 十进制定 n位可表示 二进制定点 十进制定点
整数
点整数 的个数 小数
小数
原 11111111~ -127~ 码 01111111 +127
2n-1个
1.1111111~ -127/128~ 0.1111111 +127/128
位取反, 最后+1 1的补码是00000001, —1的补码是11111110。
2)转换方法 当真值为正数时,原码、反码、补码 3种机器数的最高位均为0 当真值为负数时,原码、反码、补码 3种机器数的最高位均为1
机器数的最高位为符号位,其它位称为数值位。
当真值为正数时,原码=反码=补码; 当真值为负数时,三种机器数的符号位相同,均为1,原码的数值 位保持“原”样,反码的数值位是原码数值位的“按位取反”,补码的数值 位是原码的数值位的“按位取反”后再加1,简称“取反加1”。 当真值为负数时:补码 = 反码+1
原码、反码和补码的概念 本节要求
掌握原码、反码、补码的概念
知识精讲 数值型数据的表示按小数点的处理可分为定点数和浮点数;按符号
位有原码、反码和补码三种形式的机器数。 一.计算机中数据的表示方法
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 ----------
-----------------
在计算机中表示一个浮点数其结构为:
阶码部分
同余的概念 两个整数a,b,若它们除以整数m所得的余数相等,则称a,b对于模m同 余
记作 a ≡ b (mod m) 读作 a 与 b 对于模 m 同余 举例说明: 4 mod 12 = 4 ; 16 mod 12 = 4 ; 28 mod 12 = 4 所以4, 16, 28对于模 12 同余. 两个定理: 1、反身性:
由此可见:n位的二进制数用原码表示,则可表示的数的个数为2n-1 个;n位的二进制数用反码表示,则可表示的数的个数为2n-1个;n位 的二进制数用补码表示,则可表示的数的个数为2n个。
比如:补码中用(-128)代替了(-0)
编程中常用到的32位int类型,可以表示范围是: [-231 ~ 231 -1] 因 为第一位表示的是符号位.而使用补码表示时又可以多保存一个最小值 -2G ~ 2G -1
比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是 00000011。如果是 -3 ,就是 10000011 。
那么,这里的 00000011 和 10000011 就是机器数。 真值:用“+”、“—”号表示的二进制数。 机器数因为第一位是符号位,所以机器数的形式值就不等于真正的 数值。例如上面的有符号数 10000011,其最高位1代表负,其真正数值 是 -3 而不是形式值131(10000011转换成十进制等于131)。所以,为 区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。 例:0000 0001的真值 = +000 0001 = +1,
反 10000000~ -127~ 码 01111111 +127
2n-1个
1.1111111~ -127/128~ 0.1111111 +127/128
补 10000000~ -128~ 码 01111111 +127
(-128)代 替了(-0)
2n个
1.1111111~ -1~-127/128 0.1111111
若计算结果比能表示的最大数还大则称为上溢,上溢时一般作溢出 中断处理;
若计算结果比能表示的最小数还小则称为下溢,下溢时一般作机器 零处理。
下面介绍用双符号判断溢出方法:
引入两个符号位Cs+1、Cs Cs+1用来表示两个符号位向更高位进位时的状态,有进位时 Cs+1=1,无进位时Cs+1=0; Cs用来表示两数值的最高位向符号位进位时的状态,有进位时 Cs=1,无进位时Cs=0; 当Cs+1Cs=00或11时,无溢出;当Cs+1Cs=01或10时,有溢出,
把补数用到计算机对数的处理上,就是补码。
负数取模 x mod y = x - y*int( x / y )
int( x / y ) VB语法表示:不大于(x/y)的最大整 数,即向下取整
int(-1.5)=-2 Fix(-1.5)=-1 举例: -3 mod 2 = -3 - 2*int(-3/2) = -3 - 2* (-2) = -3 - 2x(-2)=1
1000 0001的真值 = -000 0001 = -1
2、原码、反码和补码的概念 1)概念 机器数: 有原码、反码和补码三种表示方法。
原码:是最简单的机器数表示法。其数符位用0表示正,1表示负, 其余各位表示真值本身。
即用第一位表示符号, 其余位表示值,比如如果是8位二进 制:
1的原码是00000001, —1的原码是10000001。
反码:正数的反码同原码, 负数的反码为除符号位外,其它各位 按位取反。
正数的反码是其本身, 负数的反码是在其原码的基础上,符号 位不变,其余各个位取反
1的反码是00000001, —1的反码是11111110。
补码:正数的补码同原码,负数的补码为反码加1。 负数的补码是在其原码的基础上, 符号位不变, 其余各
取补 取补 当真值为负数时:原码 = [补码]
补码 = [原码]
[-x]补=模 - [x]补
[x]补=模 - [-x]补 比如8bit,模= 28=1_0000_0000
Fra Baidu bibliotek
例如:(1)假设码长为8位,写出下列数的原码、反码和补码。 根据本题可得到结论:0的原码、反码各有两种表示方法,而补码
是唯一的全0表示。
当双符号位为01时正溢出,当双符号位为10时负溢出;
补 补 补 例如:[x] =10011100,[y] =10011000,则[x+y] = 。
溢出,因为Cs+1Cs=10。故溢出逻辑表达式为V=Cs+1⊕Cs
④无符号数的运算 无符号数的运算实际上是指参加运算的操作数X、Y均为正数,且整 个字长全部用于表示数值部分。 当两个无符号数相加时,其值在字长表示的范围内,其结果为正 数。 当两个无符号数相减时,其值的符号位取决于两数绝对值的大小。 另外,地址在计算机中用无符号数表示。
“模”是指一个计量系统的计数范围
例如:时钟的计量范围是0~11,模=12。
表示n位的计算机计量范围是0~2n -1,模=2n
“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出 来,计量器上只能表示出模的余数。任何有模的计量器,均可化减法 为加法运算。 比如:时钟(模=12)中,加8和减4效果是一样的,因此凡是减4运算, 都可以用加8来代替
对时钟(模=12)而言,8和4互为补数。
以12模的系统中,11和1;10和2;9和3;7和5;6和6都互为补数。共同 的特点是两者相加等于模 对于计算机,其概念和方法完全一样。 n位计算机,设n=8, 所能表示的最大数是11111111,若再加1称为 100000000(9位) 但因只有8位,最高位1自然丢失。又回了00000000,所以8位二进制系
统的模为28。
在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补 数表示就可以了。
[-x]补=模 - [x]补 [x]补=模 - [-x]补 比如8bit,模= 28
[-1]补=28 - [1]补=1_0000_0000 - 0000_0001 = 1111_1111 [-(-1)]补=28 - [-1]补=1_0000_0000 - 1111_1111 = 0000_0001
四原码, 反码, 补码再深入
计算机巧妙地把符号位参与运算, 并且将减法变成了加法, 背后蕴含了 怎样的数学原理呢? 将钟表想象成是一个1位的12进制数. 如果当前时间是6点, 我希望将时 间设置成4点, 我们可以: 1. 往回拨2个小时: 6 - 2 = 4 2. 往前拨10个小时: (6 + 10) mod 12 = 4 3. 往前拨10+12=22个小时: (6+22) mod 12 =4
一般浮点数既有整数部分又有小数部分,通常对于任何一个二进行 制数N,总可以表示成:
N=±2P×S N、P、S均为二进制数, P为N的阶码,一般为定点整数,常用补码表示,阶码指明小数点在数 据中的位置,它决定浮点的表示范围
S为N的尾数,一般为定点小数,常用补码或原码表示,尾数部分给出了 浮点数的有效数字位数,它决定 了浮点数的精度,且规格化浮点 数0.5≤|S|<1;
3、算术运算 计算机中的算术运算一般可采用补码进行,用补码表示的两个操作 数进行算术运算,符号位可直接参加运算,结果仍为补码。 ①定点补码加法运算
运算规则:[x+y]补=[x]取补+[y]补
②定点补码减法运算
补 补 补 补 运算规则:[x-y] =[x+(-y)] =[x] +[-y]
补 补 [-y] 的求法是将[y] 的各位(包括符号位)全取反,最末位
真 +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 码
加1。
补 补 即将[y] 连同符号位一起取反加1便可得到[-y] 。
[-x]补=模 - [x]补
[x]补=模 - [-x]补 比如8bit,模= 28
如:
补 补 补= [y] =10001010,则[-y] =01110110; [-1]
28 - [1]
补=1_0000_0000 - 0000_0001 = 1111_1111
S为原码表示,则 S1=1 规格化数
S为补码表示 N为正数,则S1 =1 N为负数,则S1=0
二、原码、反码和补码 1、机器数与真值
机器数:在计算机中数据和符号全部数字化,最高位为符号位,且 用0表示正、1表示负,那么把包括符号在内的一个二进制数我们称为机 器数,机器数: 有原码、反码和补码三种表示方法。
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
01 1 001 1 0 1
一个浮点形式的尾数S若满足0.5≤|S|<1,且尾数的最高位数为1,无 无效的0,则该浮点数称为规格化数;规格化数可以提高运算的精度。
补 补 补= [y] =0100,则[-y] =1100; [-(-1)]
28 - [-1]
补=1_0000_0000 - 1111_1111 = 0000_0001
注意:在进行运算时有时会发生溢出。 ③定点补码运算的溢出处理 采用补码运算时若结果的数值超出了补码所能表示的范围,则此种 情况称为溢出。
2,3方法中的mod是指取模操作, 16 mod 12 =4 即用16除以12后的余数 是4. 所以钟表往回拨(减法)的结果可以用往前拨(加法)替代!
现在的焦点就落在了如何用一个正数, 来替代一个负数. 上面的例 子我们能感觉出来一些端倪, 发现一些规律. 但是数学是严谨的. 不能 靠感觉. 首先介绍一个数学中相关的概念: 同余
尾数部分
阶符 阶数
尾符 尾数
Ef
E1E2…Em Sf
S1S2…Sn
假设用八个二进制位来表示一个浮点数,且阶码部分占4位,其中 阶符占一位;尾数部分占4位,尾符也占一位。
若现有一个二进制数N=(101100)2可表示为:2110×0.1011,则 该数在机器内的表示形式为:
101100B= 10110B * (21)D