【计算机组成原理】数值数据的表示方法

一、定点数(原码、反码、补码)

1.1 基本介绍

定点数指的是小数点固定的存储方式,因为小数点固定,所以不需要额外使用存储空间存储小数点,只需要约定好即可。计算机中定点数有两种类型:

  • 定点小数。如果是有符号数,约定小数点在符号位的后面,即: +0.XXXXXX,如果是无符号数,约定小数点在最前边,即: 定点小数的是类似:0.XXXXXX
  • 定点整数。约定小数点在最后边。定点整数是类似:XXXXXX.0这种形式

 

1.2 定点数的机器码表示

对于一个有符号数,将数的数符连同数一起 编码并作为数的一部分同数一起参与运算,这种连同数符一起进行编码的 表示形式 称为 机器数或机器码,根据运算方法的需要,数的机器码往往会不相同,常见的有 原码、反码、补码和移码

机器数第一位为符号位,所以机器数的形式值不等于真正的数值。如有符号数 10000011,第一位为符号位,其真正数值为 -3 而不是形式值 131 (10000011转换成十进制等于131)

所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值
例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1

 

1.3 原码表示法

原码表示法是一种比较直观的 机器码表示法
原码的最高位作为符号位,用 “0” 表示正号,用 “1” 表示负号,有效值部分用二进制数的 绝对值 表示。

 
1.对于定点小数:

设 [x] = x0x1x2x3…xn,其 n + 1 位,其中 x0 为符号位
 在这里插入图片描述
 
小数最高位也就是符号位的真值为 20 = 1

10 进制数: +0.625,它的二进制表示是: +0.101.
用原码表示法就是: 0.101.
# 其实也就是二进制表示 +0.11 的数值本身.
---------
再如 10 进制数: -0.625,它的二进制表示是: -0.101.
用原码表示法就是: 1.101.
# 其实也就是二进制表示的 -0.11 进行如下运算: 2^0 - (-0.101) = 1 + |-0.101| = 1.101. 

对于负数的定点小数的原码,规则也就是: 二进制表示去掉负号符号加 1

 
2.对于定点整数:

设 [x] = x0x1x2x3…xn,其 n + 1 位,其中 x0 为符号位
 在这里插入图片描述
 
整数最高位也就是符号位的真值为 2n

如十进制数: +5,它的二进制表示是: +101.
用原码表示就是: 101.
# 其实也就是二进制表示的 +101 的数值本身.
---------
再如十进制数: -5,它的二进制表示是: -101.
用原码表示就是 1101.
# 其实也就是二进制表示的 -101 进行如下运算: 2^4 - (-101) = 2^4 + |-101| = 1011.

对于负数定点整数的原码,规则也就是: 二进制表示去掉负号符号加 2^n

综上,原码表示法就是去掉符号位,正数高位补 0,负数高位补 1,对于负数高位补 1 的理解可以是在其二进制表示的基础上,去掉符号(绝对值)加上 2n(n与二进制位数包含符号位个数相等)

 

&.对于真值 0,其原码有 正0和负0 之分,即 0 的原码不唯一。因此对于定点小数和定点整数,0 的表示各有两种形式:

在这里插入图片描述

 

1.4 反码表示法

反码的表示方法是:

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

 
1.对于定点小数:

设 [x] = x0x1x2x3…xn,其 n + 1 位,其中 x0 为符号位
 
在这里插入图片描述

如十进制数: +0.625,它的二进制表示是: +0.101.
原码表示法是: 0.101,因此补码也是 0.101.
# 也二进制数 +0.101 数值本身.
---------
再如十进制数: -0.625,它的二进制表示是: -0.101
原码表示法是: 1.101, 在些基础上除开符号位取外得到反码: 1.010.
# 原理是: (10.000 - 0.001) + (-0.101) = 1.111 - 0.101 = 1.010.

 
2.对于定点整数:

设 [x] = x0x1x2x3…xn,其 n + 1 位,其中 x0 为符号位
 
在这里插入图片描述

如十进制数: 5, 它的二进制表示是: +101.
原码表示是 101, 因此补码也是 101.
# 也就是二进制表示 +101 数值本身.
---------
再如十进制数: -5, 它的二进制表示是: -101.
用原码表示是 1101, 反码就是: 1010.
# 对于取反操作,我们可以发现的是一个二进制表示,如: 1100,取反后是: 0011,
它们相加的结果都会是: 11111 的个数取取决于 11000011 的位数,而 1111 又等于 10000 - 1.
因此,1111 可以表示成 10000 - 1,1111 = 10000 - 1, 十进制表示也就是: 2^n+1 - 1.
所以它与二进制表示的 -101 的关系是: 
(10000 - 1) + (-101) = 1111 - 101.
(也可以理解成,其中 1_111(10000-1) 中的 111101 完成取反,111 - 101 = 010,而首位 1 赋给其符号位,1 就是表示负号.)

 
综上,负数反码对原二进制数要完成的操作是(定点整数示例): 取相应位数表示的 1111(n+1位),其中 n 位完成取反操作(如: 111 - 010 = 101),首位 1 赋于其负号表示(负号用 1 表示).
对于定点整数(10000 - 1 = 1111),10000 就是 2^n+1,1 就是 2^0.

对于定点小数(10.000 - 0.001 = 1.111),10.000 是 2^0,0.001 是 2^-n
n 是二进制位包含符号位的个数.

 

1.5 补码表示法

正数的补码就是原码。负数的补码是 反码加1

 
1.对于定点小数

设 [x] = x0x1x2x3…xn,其 n + 1 位,其中 x0 为符号位
 
在这里插入图片描述

 
2.对于定点整数

设 [x] = x0x1x2x3…xn,其 n + 1 位,其中 x0 为符号位
 
在这里插入图片描述

 
负数补码的表示与反码的表示相似,只不过在其基础上加1,以定点整数为例:
反码的规则是: 10000 - 1 - 101 = 1111 - 101 = 1010,
而补码的规则为 10000 - 101 = 1111 +1 - 101 = 1111 - 101 + 1 = 1010 + 1.

 

1.6 各种机器码所表示的数的范围

在这里插入图片描述

 

二、浮点数(IEEE754标准)

目前,几乎所有的计算机都支持 IEEE 754 标准,它大大地改善了科学应用程序的可移植性。IEEE 754标准中 阶数用移码表示,尾数用原码表示。

对于一个任意进制数 N,均可表示成 N = M x RE,比如十进制数表示的23.67×10-2、0.68×103。其中:

  • M 称为浮点数的尾数,用定点小数表示,值可正可负,尾数的符号就是浮点数的符号,尾数的位数决定了浮点数的表示精度;IEEE754 标准中尾数 M 用原码表示
  • E 称为浮点数的阶码,即通常所说的指数,用定点整数表示,值可正可负,其位数决定了浮点数的表示范围;IEEE754 标准中阶码 E 用移码表示(也就是无符号数)
  • R 称为浮点数阶码的基数,在二进制浮点数据表示中,R 的取值通常为2,由
    于R的取值是默认的,因此,在浮点数的表示格式中省去了对 R 的表示.

 
IEEE754 两种常规格式:
在这里插入图片描述

在IEEE754标准中,一个规格化的32位浮点数x的真值可表示为:

X = (-1)s x (1.M) x 2E-127
其中,S、M、E分别为32位浮点数表示格式和存储格式中的数符、尾数和阶码。公式中的 E-127 表示浮点数 X 的指数 e,即 e=E-127 或 E=e+127

 
&、关于 IEEE754 中的阶码为什么是 +127 而不是 +128?

1. 因为 8 个二进制位能表示指数的取值范围为 [-128,127],现在要将指数变成移码表示,即把区间 [-128,127] 正向平移到正数域。
2. 而阶码的范围只能是 [1,254],就是说阶码没有 0 与 255(全0和全1),因为 IEEE754 规定,全 1 是无穷大,全 0 是非规范数。

  • 如果是 +128,反过来推,[1,254] -> [-127,126],那么 +128 的话最终指数能表示的范围是 -127~126
  • 如果 +127,反过来推,[1,254] -> [-126,127],那么 +127 的话最终指数能表示的范围是 -126~128
     

综上,如果偏移量仍为 128 的话,则指数最大只能取到 126,显然会缩小浮点数能表示的取值范围。所以 IEEE754标准 规定单精度的阶码偏移量为 127.

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

り澄忆秋、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值