本文内容:进制转换,有符号数和无符号数,定点数和浮点数,机器码(原码、反码、补码、移码),字符与字符串的表示方法,汉字的表示方法,校验码 。
本文内容-思维导图
如果看不清思维导图的可以右键,选择“在新标签页中打开图片”。
本文主要介绍计算机中数据与文字的表示方法。
首先,我们先对数据的表示方法进行分类。数据可以分为真值和机器数。
真值即平常我们书写的数,可以带正负号。十进制,二进制,八进制,十六进制均可。(在这部分里,会介绍数制及其转换)。
机器数即数据在计算机中的二进制表示形式,数的位数受及其字长的限制。
机器数的分类,按能否表示负数分就有无符号数和有符号数;按数据可表示范围分就有定点数和浮点数。
机器数的表示形式,分为原码、反码、补码、移码。(原码、反码、补码、移码。都是针对于 有符号的定点数)。计算机中的定点数使用补码进行运算。
然后介绍字符与字符串的表示方法,ASCII码。
汉字的表示方法:汉字的输入编码,汉字内码,汉字字模码。
校验码:奇校验,偶校验。
真值
平常我们书写使用的数,可以带正负号。十进制,二进制,八进制,十六进制均可。
- 按数制分
- 十进制:日常使用。在微机中直接运算困难。
- 二进制:微机中使用。占存储空间少,硬件上易于实现,易于运算。
- 八进制:用于缩短二进制的数字长度,方便观察和使用。
- 十六进制:用于缩短二进制的数字长度,方便观察和使用。
进制
进制是人们利用符号来计数的方法,可以用有限的数字符号代表所有的数值。
进制不同,则基数不同。
基数是指,进制中所采用的数码的个数,用 n 代表基数,则 n进制,是逢 n 进 1。
对于任何一个数,我们可以用不同的进位制来表示。
比如:十进数
十进制
十进制包括 10 个数码符号:0、1、2、3、4、5、6、7、8、9
十进制的基为:10
十进制运算规律是逢十进一,如 9+1=10,99+1=100
十进制是生活中最常用的进制,在微机中直接运算困难。
二进制
二进制包括两个数码符号:0 和 1
二进制的基为2。
二进制运算规律是逢二进一:1+1=10
二进制数的加法和乘法运算如下:
0+0=0,0+1=1,1+0=1,1+1=10
0×0=0,0×1=0,1×0=0,1×1=1
为区别于其它进制数,二进制数的书写通常在数的右下方注上基数2,或加后面加B表示。
示例:
计算机中的数据均采用二进制数表示,这是因为二进制数具有以下特点:
二进制数中只有两个字符 0 和 1,表示具有两个不同稳定状态的元器件。例如,电路中有、无电流,有电流用 1 表示,无电流用 0 表示。类似的还比如电路中电压的高,低,晶体管的导通和截止等。
二进制数运算简单,大大简化了计算中运算部件的结构。
但是,二进位制有个致命的缺陷,就是数字写出来特别长,如:把十进位制的 100000 写成二进位制就是
二进位制写成八进位制时,长度只有二进位制的三分之一,把十进位制的 100000 写成八进位制就是
八进制
八进制用于缩短二进制的数字长度,1 个 八进制数位,可以表示 3 个 二进制数位。
八进制基数是 8,使用的数码符号为:0、1、2、3、4、5、6、7
八进制逢八进一,即
十六进制
十六进制用于缩短二进制的数字长度,十六进位制的一个数位可代表二进位制的四个数位。
十六进制的基数是 16。
十六进制包含十六个数码符号:0、1、2、3、4、5、6、7、8、9、A、 B、 C、D、 E、 F
十六进制 逢十六进一,如
进制的位权
位权是指,进位制中每一固定位置对应的单位值。
各种进制中不同位的权为
- 十进制中,各位的权为
10(n−1) - 二进制中,各位的权为
2(n−1) - 八进制中,各位的权为
8(n−1) - 十六进制中,各位的权为
16(n−1)
例:
进制的转换
非十进制向十进制转换,十进制向二进制转换。
二进制、八进制、十六进制之间进行转化。
非十进制转成十进制
方法:将相应进制的数按位权,展开成多项式,按十进制求和。
= F×
=
=1×
=
十进制转二进制
整数部分的转换
除2取余法:即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。
例:
小数部分的转换
乘2取整法:即采用连续乘以基数2,并依次取出的整数部分,直至结果的小数部分为0为止或达到要求的精度时。
例:
二进制与八进制间的转换
从小数点开始,将二进制数的整数和小数部分每三位分为一组,不足三位的分别在整数的最高位前和小数的最低位后加“0”补足,然后每组用等值的八进制码替代,即得目的数。
例:
二进制与十六进制间的转换
从小数点开始,将二进制数的整数和小数部分每四位分为一组,不足四位的分别在整数的最高位前和小数的最低位后加“0”补足,然后每组用等值的十六进制码替代,即得目的数。
例:
机器数
符号化后的真值(包括正负号的表示),在机器中表示的二进制数。一般位数固定(8、16、32……),与机器字长有关,不能随便忽略任何位置上的0或1。
计算机实际使用中用来运算和存储的带符号整数都是补码。
机器数的分类
-
按能否表示负数分
- 无符号数:所有位均表示数值,直接用二进制数表示。
- 有符号数:有正负之分,最高位为符号位,其余位表示数值。
-
按数据的表示范围分
- 定点数:小数点位置固定,数据表示范围小,但要求的处理硬件比较简单。
- 浮点数:小数点位置不固定,数据表示范围较大,但要求的处理硬件比较复杂。
有符号数和无符号数
以下将包括这些内容:
- 有符号数
- 无符号数
- 有符号数和无符号数的范围
有符号数,二进制的最高位(最左边)作为符号位,1代表负数,0代表正数。其余位代表数值。
无符号数,二进制位均代表数值,没有符号位。
有符号数和无符号数的范围
在确定范围时,我们要首先知道,我们用多大的大小来存储这个数。
比如说,当机器字长为16位时,无符号数所能表达的最大数为:
而 有符号数,因为最高位要作为符号位,兼容负数的可能性,即要牺牲一个位元来做符号表明,不能用来表示数值,所以少一位。
有符号数能表达的最大的正数为:
有符号数能表达的最小的负数为:
定点数和浮点数
以下将包括这些内容:
-
定点数的表示方法和表示范围
- 纯小数的定点数
- 纯整数的定点数
浮点数的表示方法
浮点数的规格化
-
浮点数的表示范围
- 浮点数的溢出
-
浮点数的 IEEE754 标准表示
- 32位浮点数的 IEEE754 标准表示
- 64位浮点数的 IEEE754 标准表示
-
IEEE754 标准的数据表示
- IEEE754 标准对特殊数据的表示
定点数的表示方法和表示范围
定点格式,即约定机器中所有数据(即二进制数)的小数点位置是固定不变的。通常将定点数据表示成纯小数或纯整数。为了将数表示成纯小数,通常把小数点固定在数值部分的最高位左边;而为了将数表示成纯整数,则把小数点固定在数值部分的最低位右边,如下图所示:
注意:图中所标示的小数点在机器中是不表示出来的(即并没有实际保存小数点),而是事先约定在固定的位置。对于一台计算机,一旦确定了小数点的位置,就不再改变。
假设用一个 n+1 位字来表示一个定点数 x ,则:
纯小数的定点数的表示方法:
-
能否表示负数分:
有符号数:
x =x0 x−1 x−2 ……x−n , 0≤ |x| ≤ 1 -2−n ,x0 为符号位无符号数:
x =x0 x−1 x−2 ……x−n , 0≤ x ≤ 1 -2−n ,x0 为数值位
-
数据表示范围:
- 有符号数:0.0…0 = 0 ≤ |x| ≤ 1 -
2−n = 0.1…1
(最高位
x0 为符号位,我们这里考虑数的绝对值。因此,当数值位均为0时,数的绝对值最小;当数值位均为1时,数的绝对值最大)- 无符号数:0.0…0 = 0 ≤ x ≤ 1 -
2−n = 0.1…1
(最高位
x0 为数值位。因为,小数点在x0 和x−1 之间,且我们这里考虑的是纯小数。如果将最高位x0 当做数值位运算,则不是纯小数了。因此,无符号数的定点纯小数的范围和有符号数的定点纯小数的范围一致 ) - 有符号数:0.0…0 = 0 ≤ |x| ≤ 1 -
纯整数的定点数的表示方法:
-
能否表示负数分:
有符号数:
x =xn xn−1 xn−2 ……x1 x0 , |x| ≤2n -1 ,xn 为符号位无符号数:
x =xn xn−1 xn−2 ……x1 x0 , 0≤ x ≤2n+1 -1 ,xn 为数值位
-
数据表示范围:
- 有符号数: |x| ≤
2n -1 = 1…1
(最高位
xn 为符号位,我们这里考虑数的绝对值。因此,当数值位均为1时,数的绝对值最大)- 无符号数:0…0 = 0≤ x ≤
2n+1 -1 = 1…1
(最高位
xn 为数值位。因为没有符号位,所以不能表示负数,因此最小值就是位数全取0,则等于0;因为不用表示符号位,所以最大值的范围比有符号数大1位,位数全取1,即2n+1 -1) - 有符号数: |x| ≤
定点数表示法的缺点在于其形式过于僵硬,固定的小数点位置决定了固定位数的整数部分和小数部分,不利于表达特别大或特别小的数。
通过科学计数法中我们得到启示,在计算机中还可以这样表示一个数据:把一个数的有效数字和数的范围在计算机的一个存储单元中分别予以表示。
这种把数的范围和精度分别表示的方法,相当于数的小数点位置随比例因子的不同而在一定范围内可以*浮动,所以称为浮点表示法。
浮点数的表示方法
浮点数格式定义:N=
- M:尾数,是一个纯小数,表示数据的全部有效数位,决定着数值的精度。
- R:基数,可以取2、8、10、16,表示当前的数制(微机中,一般默认为2,隐含表示。)
- e: 阶码,是一个整数,用于指出小数点在该数中的位置,决定着数据数值的大小。
浮点数规格化
-
浮点数的表示
- 1.11×
20 = 0.111×21 =11.1×2−1 - 机器数的表示不同,不利于运算,因此需要规格化
- 1.11×
-
规格化的目的
- 保证浮点数表示的唯一性
- 保留更多地有效数字,提高运算的精度
-
规格化要求
- 1/R ≤ |尾数| < 1
-
规格化处理
- 尾数向左移n位(小数点右移),同时阶码减n ;左规
- 尾数向右移n位(小数点左移),同时阶码加n ;右规
-
尾数用原码表示时
- 尾数最高数值位为1
- 尾数形如 0.1××…×(正);或 1.1××…×(负)
- 例如,0.011×
25 要规格化则变为 0.11×24 ;
-0.011×25 要规格化则变为 1.11×24 ;
-
尾数用补码表示时
- 尾数最高数值位和尾数符号位相反
- 尾数形如 0.1××…×(正);或 1.0××…×(负)
- 例如,0.011×
25 要规格化,则变为 0.11×24 ;
-0.011×25 要规格化,则变为 1.01×24 ;
浮点数的数据表示范围
浮点数的IEEE754标准表示
在IEEE标准中,浮点数是 将特定长度的连续字节的所有二进制位 分割为特定宽度的符号域、指数域和尾数域这三个域,域中的值分别用于表示给定二进制浮点数中的符号、指数和尾数,这样,通过尾数和可以调节的指数就可以表达给定的数值了。
为便于软件移植,按照 IEEE754 标准,实际机器内32位浮点数(单精度格式)和64位浮点数(双精度格式)的标准格式如下:
32位浮点数的IEEE754 标准表示(单精度格式)
数符S:表示浮点数的符号,占1位,0—正数、1—负数
尾数M:23位,原码纯小数表示,小数点在尾数域的最前面;
由于原码表示的规格化浮点数要求,最高数值位始终为1,因此该标准中隐藏最高数值位(1),尾数的实际值为1.M;
阶码E:8 位,采用有偏移值的移码表示;
移127码,即E=e+127,E的8位二进制数即为移127码的编码浮点数的真值:N=(-1)S×(1.M)×
2E−127
64位浮点数的IEEE754 标准表示(双精度格式)
数符S:表示浮点数的符号,占1位,0—正数、1—负数
尾数M:52位,原码纯小数表示,小数点在尾数域的最前面;
由于原码表示的规格化浮点数要求,最高数值位始终为1,因此该标准中隐藏最高数值位(1),尾数的实际值为1.M;
阶码E:11 位,采用有偏移值的移码表示;
移1023码,即E=e+1023,E的11位二进制数即为移1023码的编码浮点数的真值:N=(-1)S×(1.M)×
2E−1023
IEEE754 标准的数据表示
- IEEE754 标准中的阶码E 0000 0000 ~ 1111 1111
- 正零、负零 E=0000 0000,M=0000 … 0000(E与M均为零,正负之分由数据符号确定)
- 正无穷、负无穷 E=1111 1111,M=0000 … 0000(E为全1,M为全零,正负之分由数据符号确定)
- 阶码E的其余值(0000 0001~1111 1110)为规格化数据(真正的指数e的范围为-126~+127
)
IEEE754 标准对特殊数据的表示
单精度浮点数(float)与双精度浮点数(double)的区别如下
在内存中占有的字节数不同
单精度浮点数在机内占4个字节
双精度浮点数在机内占8个字节有效数字位数不同
单精度浮点数有效数字8位
双精度浮点数有效数字16位所能表示数的范围不同
单精度浮点的表示范围:-3.40E+38 ~ +3.40E+38
双精度浮点的表示范围:-1.79E+308 ~ +1.79E+308在程序中处理速度不同
一般来说,CPU处理单精度浮点数的速度比处理双精度浮点数快
浮点数的例题
例1:若浮点数x的754标准存储格式为(41360000)16,求其浮点数的十进制数值。
解:
指数 e =E-127= 1000 0010 - 0111 1111=0000 0011=3
尾数 1.M =1.011 0110 0000 0000 0000 0000=1.011011
浮点数 N =
例2:将(20.59375)10转换成754标准的32位浮点数的二进制存储格式。
解:
将尾数规范为1.M的形式:10100.10011=1.010010011×
可得:M = 010010011 S = 0(因为是正数) E = 4+127=131=1000 0011
故,32位浮点数的754标准格式为:
0 100 0001 1 010 0100 1100 0000 0000 0000=(41A4C000)16
例3:将十进制数-54表示成二进制定点数(16位)和浮点数(16位,其中数值部分10位,阶码部分4位,阶符和数符各取1位),并写出它在定点机和浮点机中的机器数形式。
解:令 x = -54,则x = -110110
16位定点数真值表示: x = -000 0000 0011 0110
- 定点机器数形式
-
[x]原 :1 000 0000 0011 0110 -
[x]补 :1 111 1111 1100 1010
-
浮点数规格化表示:x = -(0.1101100000)×
- 浮点机器数形式(此处为非 IEEE745标准)
-
[x]原 : 0 0110 ; 1 11 0110 0000 -
[x]补 : 0 0110 ; 1 00 1010 0000
-
例4:假设一个32位非零规格化浮点数x,真值表示为:x=
解:
浙江大学考研试题:计算机存储程序的特点之一是把数据和指令都作为二进制信号看待。今有一计算机字长 32bit,数符位是第 31bit,单精度浮点数格式如图所示:
对于二进制数 1000 1111 1110 1111 1100 0000 0000 0000
- 表示一个补码整数,其十进制值是多少?
- 表示一个无符号整数,其十进制值是多少?
- 表示一个IEEE754标准的单精度浮点数,其值是多少?
解:
1、作为补码整数,其对应的原码是 1111 0000 0001 0000 0100 0000 0000 0000。
转换成十进制值是: -(
2、1000 1111 1110 1111 1100 0000 0000 0000 作为无符号整数,
其十进制值是
3、二进制数1000 1111 1110 1111 1100 0000 0000 0000 作为IEEE754标准的单精度浮点数时
即
阶码E是 0001 1111
指数e =阶码E-127=0001 1111-0111 1111 = -1100000B =-96D
尾数M = 110 1111 1100 0000 0000 0000
则1.M = 1. 110 1111 1100 0000 0000 0000 = 1.110 1111 11
所以,单精度浮点数值为:
X =
= -(1.110 1111 11) ×
= -(0.1110 1111 11)×
机器数的表示形式
-
按编码不同分类
- 原码
- 反码
- 补码
- 移码
注意:原码、反码、补码、移码。都是针对于 有符号的定点数的。
计算机实际使用中用来运算和存储的带符号整数都是补码。
原码
若 定点整数的原码形式为 x =
举例:
[+0.110]原 = 0.110 (实际机器中保存时,并不保存小数点)[−0.110]原 = 1 - (-0.110) = 1.110(实际机器中保存时,并不保存小数点)[+110]原 = 0110[−110]原 =23(10) - (-110) =1000(2) +110 = 1110
0 在原码机器中,有两种表示法,因为要表示“+0”和“-0”
-
[+0]原 = 0….0 -
[−0]原 = 1….0
原码数据表示范围:
定点小数:
−1<X<1 定点整数:
(−2)n < X <(2)n (若数值位n=3,即:−8<X<8 )
原码优点:与真值对应关系简单,即符号位加上二进制数的绝对值,即用第一位表示符号, 其余位表示值
原码缺点:加法运算复杂。
因为,当两数相加时,如果是同号则数值相加;如果是异号,则要进行减法。而在进行减法时,还要比较绝对值的大小,然后大数减去小数,最后还要给结果选择恰当的符号。
反码
反码的表示方法是:
正数的反码是其本身
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
[+1] =
[-1] =
补码
在给出补码定义前。我们先通过例子将补码表示法引入。
我们先以钟表对时为例,说明补码的概念。
首先,我们都知道。钟表是以 12 为一个周期的。假设现在我们要将指向5点的时钟调整到 3点整,应该如何处理?
- 用减法来处理。回拨2小时。5-2=3
- 用加法来处理。往前拨 10小时。5+10=3(12自动丢失,12就是模)
即,在 模为12时,我们可以得到:5-2=5+10 (因为我们都得到了3点整的结果)
我们可以将减法化作加法,进一步化简算式可得:5+(-2)=5+10
因为两边都有5,可以去掉5,,化简算式可得,-2=10
结论:在模为12的情况下,-2的补码就是10。负数用补码表示时,可以把减法转化为加法,同样可以得到正确的运算结果。
进一步结论:
-
在计算机中,机器能表示的数据位数是固定的,其运算都是有模运算。
- 若是 n+1 位定点纯整数(包含符号位),则其模为
2n+1 。(因为是2进制,又有n+1位,所以模为2n+1 ) - 若是定点纯小数,则其模为2。(因为是定点纯小数,故整数部分只可能为 1 位,则模为
21 = 2)
- 若是 n+1 位定点纯整数(包含符号位),则其模为
若运算结果超出了计算机所能表示的数值范围,则只保留它的小于模的低n位的数值,超过n位的高位部分就自动舍弃了。
若 定点整数的补码形式为 x =
举例:
[+0.110]补 = 0.110 (实际机器中保存时,并不保存小数点)[−0.110]补 =2(10) + (-0.110) =10(2) + (-0.110) = 1.010(实际机器中保存时,并不保存小数点)[+110]补 = 0110-
[−110]补 =24(10) + (-110) =10000(2) - 110 = 1010
0 在补码机器中,有唯一表示法:
补码数据表示范围:
定点小数:
−1<X<1 定点整数:
(−2)n < X <(2)n (若数值位n=3,即:−8<X<8 )
补码加减运算规则:
补码的补码是原码:
计算机实际使用中用来运算和存储的带符号整数都是补码。
为何使用补码?因为对于所有的数(无论整形实形)在系统内部都只能有唯一的表示方式。可是0的原码和反码都不是唯一的(10000000或00000000),所以有了补码。补码直接参与二进制运算,减法变成加法运算。比原码和反码相对于机器而言更优。
原码、反码、补码的快速转换
一个正整数,当用原码、反码、补码表示时,符号位都固定为 0,用二进制表示的数值位都相同。即对于正整数来说,原码、反码、补码相同。
一个负整数,当用原码、反码、补码表示时,符号位都固定为 1,用二进制表示的数值位都不相同。即对于负整数来说,原码、反码、补码不同。
- 原码:符号位为1,数值位为二进制表示的真值
- 反码:符号位为1,数值位的每一位取反
- 补码:符号位为1,反码数值的最低位加1。或者:从最低位开始,遇到的第一个1以前的各位保持不变,之后各位取反。(仅针对于负数)
- 例:
[X]原 = 1 1 0 1 1 0 1 0 0,[X]补 = 1 0 1 0 0 1 1 0 0
- 例:
+128,-128,+0,-0,+1,-1 的原码、反码、补码
假设我们用8位二进制码,来表示这几个数。
因为这些值都比较特殊,因此不能用上面我们说的快速运算方法。需要用定义计算。
真值x(10进制) | 真值x(二进制) |
|
|
|
---|---|---|---|---|
+128 |
|
无(对于8位来说,溢出了) | 无(对于8位来说,溢出了) | 无(对于8位来说,溢出了) |
-128 |
|
无(对于8位来说,溢出了) | 无(对于8位来说,溢出了) |
|
+0 |
|
0000 0000 | 0000 0000 | 0000 0000 |
-0 |
|
1000 0000 | 1111 1111 | 0000 0000 |
+1 |
|
0000 0001 | 0000 0001 | 0000 0001 |
-1 |
|
1000 0001 | 1111 1110 | 1111 1111 |
移码
移码主要用于表示浮点数的阶码E,有利于比较两个指数的大小和对阶操作。
定义:
与
优点:
- 可以比较直观地判断两个数据的大小(浮点数运算时,容易进行对阶操作)
- 表示浮点数阶码时,容易判断是否下溢(当阶码为全0时,浮点数下溢)
例子:
原码、反码、补码、移码的表示范围
以定点整数为例,用数轴形式说明原码、反码、补码、移码表示范围和可能的数码组合情况。
解:
字符与字符串的表示方法
ASCII 码
- 包括128个字符,共需7位编码
- ASCII码规定:最高位为0,余下7位作为128个字符的编码。
- 最高位的作用:奇偶校验;扩展编码
字符串
- 指连续的一串字符, 每个字节存一个字符。
- 当存储字长为2、或4个字节时,在同一个存储单元中;
可按从低位字节向高位字节的顺序存放字符串的内容,或按从高位字节向低位字节的次序顺序存放字符串的内容
汉字的表示方法
汉字的输入编码
目的:直接使用西文标准键盘把汉字输入到计算机 。
分类:主要有数字编码、拼音码 、字形编码三类。
汉字内码
用于汉字信息的存储、交换、检索等操作的机内代码
汉字字模码
用点阵表示的汉字字形代码,用于汉字的输出。
校验码
数据校验原因:为减少和避免数据在计算机系统运行或传送过程中发生错误,在数据的编码上提供了检错和纠错的支持。
数据校验码的定义:能够发现某些错误或具有自动纠错能力的数据编码;
数据校验的基本原理是扩大码距;
校验码的类型
- 奇偶校验码:判断数据中1的个数设置1位校验位。分奇校验和偶校验两种,只能检错,无纠错能力。
- 海明校验码:在奇偶校验的基础上增加校验位而得,具有检错和纠错的能力。
- 循环冗余校验码(CRC):通过模2的除法运算建立数据信息和校验位之间的约定关系,具有很强的检错纠错能力。