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

上传人:b****1 文档编号:2409769 上传时间:2022-10-29 格式:DOCX 页数:12 大小:42.88KB
下载 相关 举报
真值原码反码补码详解和习题.docx_第1页
第1页 / 共12页
真值原码反码补码详解和习题.docx_第2页
第2页 / 共12页
真值原码反码补码详解和习题.docx_第3页
第3页 / 共12页
真值原码反码补码详解和习题.docx_第4页
第4页 / 共12页
真值原码反码补码详解和习题.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

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

《真值原码反码补码详解和习题.docx》由会员分享,可在线阅读,更多相关《真值原码反码补码详解和习题.docx(12页珍藏版)》请在冰豆网上搜索。

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

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

原码、反码和补码的概念

本节要求

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

知识精讲

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

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

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---------------------------

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

阶码部分尾数部分

阶符

阶数

尾符

尾数

Ef

E1E2…Em

Sf

S1S2…Sn

假设用八个二进制位来表示一个浮点数,且阶码部分占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

(2)假设码长为8位,写出原码、反码和补码所能表示定点整数和定点小数的范围。

二进制定点整数

十进制定点整数

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

由此可见:

n位的二进制数用原码表示,则可表示的数的个数为2n-1个;n位的二进制数用反码表示,则可表示的数的个数为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

[y]补=0100,则[-y]补=1100;[-(-1)]补=28-[-1]补=1_0000_0000-1111_1111=0000_0001

注意:

在进行运算时有时会发生溢出。

③定点补码运算的溢出处理

采用补码运算时若结果的数值超出了补码所能表示的范围,则此种情况称为溢出。

若计算结果比能表示的最大数还大则称为上溢,上溢时一般作溢出中断处理;

若计算结果比能表示的最小数还小则称为下溢,下溢时一般作机器零处理。

下面介绍用双符号判断溢出方法:

引入两个符号位Cs+1、Cs

Cs+1用来表示两个符号位向更高位进位时的状态,有进位时Cs+1=1,无进位时Cs+1=0;

Cs用来表示两数值的最高位向符号位进位时的状态,有进位时Cs=1,无进位时Cs=0;

当Cs+1Cs=00或11时,无溢出;当Cs+1Cs=01或10时,有溢出,当双符号位为01时正溢出,当双符号位为10时负溢出;

例如:

[x]补=10011100,[y]补=10011000,则[x+y]补=。

溢出,因为Cs+1Cs=10。

故溢出逻辑表达式为V=Cs+1⊕Cs

④无符号数的运算

无符号数的运算实际上是指参加运算的操作数X、Y均为正数,且整个字长全部用于表示数值部分。

当两个无符号数相加时,其值在字长表示的范围内,其结果为正数。

当两个无符号数相减时,其值的符号位取决于两数绝对值的大小。

另外,地址在计算机中用无符号数表示。

四原码, 反码, 补码再深入 

计算机巧妙地把符号位参与运算, 并且将减法变成了加法, 背后蕴含了怎样的数学原理呢?

将钟表想象成是一个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 

2,3方法中的mod是指取模操作, 16 mod 12 =4 即用16除以12后的余数是4. 所以钟表往回拨(减法)的结果可以用往前拨(加法)替代!

 

现在的焦点就落在了如何用一个正数, 来替代一个负数. 上面的例子我们能感觉出来一些端倪, 发现一些规律. 但是数学是严谨的. 不能靠感觉. 首先介绍一个数学中相关的概念:

 同余

 

“模”是指一个计量系统的计数范围

例如:

时钟的计量范围是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_00

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1