信息学奥赛知识点(六)—原码补码反码

一、数的原码、补码和反码

1.机器数与真值

在计算机中,表示数值的数字符号只有0和1两个数码,我们规定最高位为符号位,并用0表示正数符号,用1表示负数符号。这样,机器中的数值和符号全“数码化”了。为了简化机器中数据的运算操作,人们采用了原码、补码、反码及移码等几种方法对数值位和符号位统一进行编码。为区别起见,我们将在机器中的这些编码表示成为机器数(如10000001)。而将原来一般书写表示的数称为机器数的真值(如-0000001)。

2.原码表示法

原码表示法是一种简单的机器数表示法,即符号位和数值表示法。设x为真值,则[x]原为机器数表示。

例:设X=1100110,则[x]原=01100110;

     X=-1100111,  则[x]原=11100110;

3.反码表示法

正数的反码就是其真值本身,负数的反码,只需对符号位以外各位按位“求反”(0变1,1变0)即可。

例:设X=1100110,则[x]反=01100110;

     X=-1100111,  则[x]反=10011000;

4.补码表示法

负数用补码表示时,可以把减法转化为加法。正数的补码就是其本身,负数的补码是符号位为1,数值各位取反(0变成1,1变成0),最低位加1。

例:设X=1100110,则[x]补=01100110;

     X=-1100111,  则[x]补=10011001;

结论:

真值原码反码补码
正数0+本身0+本身0+本身
负数1+本身1+各位取反1+各位取反后最低位+1

注意: 真值0的原码和反码表示不唯一,而补码的表示是唯一的,即:

[+0]原=0000…0, [-0]原=1000…0

[+0]反=0000…0, [-0]反=1111…1

[+0]补 = [-0]补=000…0

5.编码及其表示范围

不同的编码表示的整数范围是这样的(N位二进制位)

原码:0~2n-1(无符号),-2n-1 -1 ~ 2n-1 -1(有符号)

反码:-2n-1 -1 ~ 2n-1 -1(不存在无符号情况)

补码:-2n-1 ~ 2n-1 -1(不存在无符号)

补码表示的范围最大。


现在以8位二进制为例说明如下:

原码:

  00000000 ~ 11111111  即:0~255(无符号)
  1111111~01111111    即-127~+127(有符号)

反码:

  10000000 – 01111111 即:-127~+127 (因为1000000 的值为-127,11111111 的值为-0)

补码:

  1000000~01111111 即:-128 ~ +127 (因为1000000的值-128,1111111的值为-1)。

如果没有具体说明编码形式,则计算机中N位二进制无符号数的范围是0~2n-1-1;有符号数的范围-2n-1 ~ 2n-1 -1


以8位有符号整数为例子:

原码:
若X为正数,则最高位(符号位)为0,其余按照二进制数排列;
若X为负数,则最高位为1,后面和正数原码一样。

例: +7:00000111, -7 : 10000111

    +0:00000000, -0 : 10000000

反码:
若X为正数,则反码与原码相同
若X为负数,则将原码除符号位取反。

例: -7 : 11111000

补码:
反码+1

例: -7 : 11111001


为什么要有原码、反码和补码?

二、数的定点表示和浮点表示

在计算机中,小数点一般有两种表示法:

:小数点固定在某一个位置的定点表示法。(定点计算机)
:小数点的位置可任意移动的浮点表示法。(浮点计算机)

定点表示法:机器中所有数的小数点位置是固定不变的,因而小数点就不必使用记号表示出来。实际上,小数点的位置可以固定在任意位置上。

浮点表示法:在数的定点表示法,由于数的表示范围较窄,常常不能满足各种数值问题的需要。为了扩大数的表示范围,方便用户使用,有些计算机常采用浮点表示法。表示一个浮点数,要用两部分:尾数和阶码。尾数用以表示数的有效数值;阶码用以表示小数点在该数中的位置。

计算机多数情况下采用浮点数表示数值,它与科学计数法相似,把一个二进制数通过移动小数点位置表示成阶码和尾码两部分。

             N=2^E*S

其中:E为N的阶码,是有符号的整数;S为N的尾数,是数值的有效数字,一般规定二进制定点纯小数点形式。

例如:1011101 B = 2+7 * 0.1011101,

101.1101 B = 2+3 * 0.1011101,

0.0101101 B = 2-1 * 0.1011101,

总结
定点数适合于需要精确计算且数值范围相对固定的场景,例如金融交易。
浮点数适合于需要表示大范围数值且可以接受一定精度损失的场景,例如科学计算和图形处理。

三、科学计数法

科学记数法是一种记数的方法。把一个数表示成a与10的n次幂相

乘的形式(1≤|a|<10,a不为分数形式,n为整数),这种记数法叫做科学记数法。当我们要标记或运算某个较大或较小且位数较多时,用科学记数法免去浪费很多空间和时间。

19971400000000=1.99714×1013

计算器或电脑表达10的幂是一般是用E或e,也就是1.99714E13=19971400000000。


附录

1.定点表示法

定义

  • 定点表示法是指在计算机中表示数值的一种方式,其中小数点的位置是固定的。这意味着在存储或处理数值时,小数点的位置不会随数值的变化而变化。

特点

  • 简单:定点数的表示和处理相对简单,因为它不需要额外的硬件来处理小数点的位置。
  • 精确:对于给定的位数,定点数可以提供固定的精度,这在需要精确计算的应用中非常重要。
  • 表示范围有限:由于小数点位置固定,定点数的表示范围受到限制,不能像浮点数那样通过调整指数来表示非常大或非常小的数值。

小数点的位置

在定点表示法中,小数点的位置可以固定在任意位置上。常见的几种定点数类型包括:

  • 整数型:小数点位于最低有效位之后,即所有数值都表示为整数。例如,一个 16 位的整数可以用 16 位全部表示整数部分。
  • 纯小数型:小数点位于最高有效位之前,即所有数值都表示为小于 1 的小数。例如,一个 16 位的纯小数可以用 16 位全部表示小数部分。
  • 混合型:小数点位于最高有效位和最低有效位之间。例如,一个 16 位的混合型定点数可以用 8 位表示整数部分,8 位表示小数部分。

示例

假设我们有一个 16 位的定点数,其中 8 位表示整数部分,8 位表示小数部分。那么,我们可以用以下方式表示一个数值:

  • 整数部分:8 位(最高有效位到第 9 位)
  • 小数点
  • 小数部分:8 位(第 8 位到最低有效位)

例如,如果我们想要表示十进制数 25.75,我们可以这样分配二进制位:

  • 整数部分:00011001(对应十进制 25)
  • 小数点
  • 小数部分:1100(对应十进制 0.75)

因此,整个 16 位二进制表示为 0001100111000000

应用

定点表示法常见于以下场景:

  • 嵌入式系统:在资源受限的环境中,使用定点数可以节省内存和处理器资源。
  • 音频处理:音频信号处理中,定点数用于快速的数字信号处理。
  • 图像处理:图像处理中经常使用定点数进行色彩和像素操作。
  • 金融计算:金融领域中需要精确的货币计算,定点数可以避免浮点运算的舍入误差。

总结

定点表示法是一种简单而精确的数值表示方法,适合于那些不需要表示极大或极小数值的应用场景。它通过固定小数点的位置来简化数值的表示和处理,从而提高了效率并减少了硬件成本。

2.浮点表示法

定义

  • 浮点表示法是指在计算机中表示数值的一种方式,其中小数点的位置可以浮动,也就是说小数点的位置可以根据数值的大小进行调整。浮点数由两部分组成:尾数(也称为有效数字或小数部分)和阶码(也称为指数部分)。

特点

  • 表示范围广:通过调整阶码,浮点数可以表示非常大或非常小的数值。
  • 灵活性高:浮点数可以用来表示不同数量级的数值,非常适合科学计算和工程应用。
  • 精度问题:由于浮点数的表示不是完全精确的,因此可能会出现舍入误差。

浮点数的组成部分

一个浮点数通常由以下三个部分组成:

  1. 符号位:表示该数值是正数还是负数。
  2. 阶码:表示小数点的位置,通常是通过一个偏移量来表示指数。
  3. 尾数:表示数的有效数值部分,即小数点后的有效数字。

IEEE 754 标准

浮点数的一个重要标准是 IEEE 754,它是浮点数的国际标准。IEEE 754 定义了单精度(32 位)和双精度(64 位)浮点数的格式,以及相应的运算规则。

  • 单精度浮点数(32 位):分为符号位(1 位)、指数位(8 位)和尾数位(23 位)。
  • 双精度浮点数(64 位):分为符号位(1 位)、指数位(11 位)和尾数位(52 位)。

示例

假设我们要表示一个单精度浮点数,遵循 IEEE 754 标准,即使用 32 位来表示:

  • 符号位:1 位
  • 指数位:8 位
  • 尾数位:23 位

假设我们想要表示十进制数 12.5。首先,我们需要将这个数转换为二进制形式:

12.5 的二进制表示为 1100.1

接下来,我们需要将其规范化为标准的浮点数形式:

  • 规范化形式1.1001 × 2^3(这里我们将小数点向左移动了三位,因此指数为 +3)。

现在,我们需要将这个规范化形式转换为 IEEE 754 单精度浮点数的格式:

  • 符号位0(正数)
  • 指数位130(二进制 10000010)(这里我们使用了偏移量 127,即 3 + 127 = 130
  • 尾数位10010000000000000000000(尾数部分去除隐含的 1)

因此,最终的 32 位二进制表示为 0 10000010 10010000000000000000000

总结

浮点表示法是一种灵活的数值表示方法,通过调整阶码可以表示非常大或非常小的数值。它适用于需要表示宽范围数值的应用场景,如科学计算和工程应用。IEEE 754 标准定义了浮点数的具体格式和运算规则,确保了跨平台的一致性和兼容性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值