HELLO WORLD--一起加油(🍺)!|

kingwzun

园龄:3年6个月粉丝:111关注:0

二、数据的表示与运算

进制转换

二进制....八进制......
十六进制
一般用数字0到9和字母A到F表示,其中:AF相当于十进制的1015

八进制和十六进制 主要目的: 简化二进制的书写

进制转化

二进制<->八进制
3位二进制数,对应1位八进制数

例如:
1001101.012=115.28
(整数部分向前补零,小数部分向后补零)

二进制<->十六进制
4位二进制数,对应1位八进制数

例如:
1001101.012=4D.416
(整数部分向前补零,小数部分向后补零)

十进制分数-> 二进制
分子分母先转化成二进制,然后分子二进制减去分母二进制即可
例:
19128=24+21+2027=23+26+27=0.0010011

数的机器码表示

定点表示

计算机有两种表达小数的方法:

  • 定点格式:小数点事先约定,位置固定
  • 浮点格式:小数点按规则浮动,位置不固定

注意:两者都是隐含存储(实际存储中不存储小数点)。

定点小数
image

例如:(假设约定小数点位于符号位后面) +0.75D = 0.11B 存储为011 ;-0.75D = 1.11B 存储为111

表示范围:(假设约定小数点位于符号位后面)
有n位尾数的定点小数:(12n)12n

定点整数
image

例如(未考虑位数扩展):+3D = 011.B 存储为011 ; -3D = 111.B 存储为111

表示范围
有n位尾数的定点整数:(2n1)2n1

定点数特点

  1. 表示的数的范围受计算机字长的限制;
    有符号数首位用于表示符号,因此和无符号数表示的范围不同

  2. 符号位被数字化 (正号:0 负号:1)

  3. 小数点处于约定的位置
    定点数:小数点的位置固定不变。
    浮点数: 小数点的位置允许浮动。

机器码分类:
一、无符号数
二、有符号数
1.机器数与真值 2. 原码表示法 3. 补码表示法 4. 反码表示法 5. 移码表示

无符号数

定义:整个机器字长的全部二进制位均为数值位,没有符号位,相当于数的绝对值。

表示范围:n 位的无符号数表示范围为:02n1

有符号数

真值和机器数

真值: 带符号的数字
机器数:符号位被数字化的数(真值在计算机中的二进制表示形式。)
例如:真值+15 对应的机器码是0 1111;真值-8 对应的机器码是1 1000

注意: 真值和机器数的区别是 符号是否被数字化。和是几进制没有关系。
一般来说0表示正数,1表示负数

由于机器只能是0/1,因此必须引入 机器数,为了解决机器数带来的复杂的运算问题,引出了:原码,补码,反码,移码。

原码表示法

(和上面用的 机器数 相同)
定义: 最高位为数的符号位,其余位为数值位;符号位用0表示正数,用1表示负数。

整数

例如:(假设字长为8位(符号位+数值位),最高位为符号位)
X=+1001, [X]=0,0000 1001
X=-1001, [X]=1,0000 1001

原码整数的数据范围:有n位尾数 (2n1)~+(2n1)

小数
如果真值1>x0[x]=x
如果真值0x>1[x]=1x

本质上还是符号用0表示正数,用1表示负数)

例如:(假设约定小数点位于符号位后面,假设字长为8位(符号位+数值位))
x=+0.1101 , [X]=0.1101 0000
x=-0.1101 , [X]=1-(-0.1101)=1.1101 0000

表示范围:(假设约定小数点位于符号位后面)有n位尾数的定点小数:(12n)12n

特点

  1. 有 正0 和 负0 之分,也就是说 +00

  2. 优点: 简单、直观

  3. 缺点: 用原码做加法时,会出现如下问题,需要根据符号位,进行分类运算。
    image

反码表示法

主要作用: 快速计算补码。

定义:

  • 正数:与原码相同
  • 负数:符号位不变,数值位将原码的数值按位取反

取值范围:
整数:image

纯小数:image

特点:

  1. 电路容易实现反码。

  2. 反码表示有正0和负0之分
    [+0]=00000000
    [0]=11111111

补码表示法

引入原因: 原码计算加法比较复杂,因此想找到一个方法,使做加法只需要做加法。

方法:
在模一个数的情况下,可以用与负数等价的正数来代替这个负数 就可使 减 -->加。

比如说:(在模数为12的情况下) -3等价于+9 记为3+9(mod12)

经发现,在二进制下,模数就是 这个二进制数的位数取全零,然后在最高位拼接上1

例如:011 1001的模数就是1000 0000

因此

  • 正数:与原码相同:(+1 0000 0000 + 0000 1110) % +1 0000 0000=+0000 1110

  • 负数:符号位与原码相同,数值位由原码取反加1得到:(+ 1,00000000 - 00001110)%+ 1,00000000=+1111 0010
    image

  • [y][y] :连同符号位在内,每位取反,末尾加1。

数据范围:(若字长为n+1)

  • 对于整数,补码的表示范围为2nx2n1(比原码多表示一个数2n)。
    [2n] = 10,0000 − 1,0000 = 1,0000 (原码这个数指的是-0)

  • 对于纯小数,补码的表示范围为1x12n(比原码多表示一个数−1)
    [1]=10.0000−1.0000= 1.0000(原码这个数指的是-0)

特点:

  1. 不区分+0和-0,都是0.0000..

  2. -1.0000没有原码,只有补码1.0000

性质:
[xy]=[x][y]=[x]+[y]

移码表示法

image

[x]=2n+x(2nx2n)

移码通常用来表示浮点数的阶码。就是将小数部分,乘为整数。
特点:移码和补码尾数相同,符号位相反

真值、补码和移码的对照表
image

小结

最高位为符号位,书写上用“,”(整数)或“.”(小数)将数值部分和符号位隔开

对于正数,原码=补码=反码

对于负数,符号位为1, 其余数值部分
原码除符号位外每位取反末位加1 补码
原码除符号位外每位取反 反码

例 设机器数字长为8位(其中1位为符号位)对于整数,当其分别代表无符号数、原码、补码和反码时,对应的真值范围各为多少?
image

已知[y][y]: 连同符号位在内,每位取反,末尾加1即可。

定点运算

数据表示格式

计算机常用的数据表示格式有两种:

  • 定点格式:小数点事先约定,位置固定
  • 浮点格式:小数点按规则浮动,位置不固定

注意:两者都是隐含存储(实际存储中不存储小数点)。

定点数表示法

image

所有数据的小数点提前约定,位置固定不变(理论上位置可以任意)。

通常表示两种数据:纯小数和纯整数。

习惯表示方法: 在符号位与数值位之间,整数用,小数用.

例如:-58;数值取10位,符取1位
二进制:1 111010,定点表示:1 0000111010

例如:19128;数值取10位,符取1位
二进制:19128=24+21+2027=23+26+27=0.0010011
定点表示:1 . 0010011000

数据范围

定点机 小数定点机 整数定点机
原码 (12n) +(12n) (2n1) +(2n1)
补码 1 +(12n) 2n +(2n1)
反码 (12n) +(12n) (2n1) +(2n1)

[例6]以定点整数为例,用数轴形式说明原码、反码、补码表示范围和可能的数码组合情况。
image

[例7]将十进制真值(-127,-1, 0,+1,+127)列表表示成二进制数及原码、反码、补码、移码值。
image

浮点数表示法

为什么要引入浮点数表示

  • 有需要调节小数点的位置的实际应用常见
  • 定点数的表示范围小,为了能表示两个大小相差很大的暑假,需要很长的机器字长;
  • 定点数 数据存储单元的利用率往往很低;

浮点数的表示形式

image

浮点数分为 阶码E和尾码M 两部分,浮点数真值N=rE×M(r为阶码的底,通常为2)

  • 阶码E 反映浮点数的表示范围及小数点的实际位置,也在一定程度上影响 精度,分为两部分:
    阶符:阶码正负性(不是浮点数的正负性)
    阶值:阶值的数值部分

  • 尾码M 和阶码一起决定表示精度,也分为两部分:
    数符:浮点数的符号(正负性)
    尾数:尾数数值部分

例:阶码、尾数均用补码表示,求a、b的真值
a = 0,01;1.1001
b = 0,01;0.0100
a: 阶码0,01对应真值+1,尾数1.1001对应真值0.0111=(22+23+24)或者理解为-111右移4位:724=716
所以a = 21×(0.0111)=21×(716)=78
b: 阶码0,01对应真值+1,尾数0.01001对应真值+0.01001 =+1001右移5位: +925=+932
所以b = 21×(+0.01001)=21×(+932)=+916

规格化

存储上面例子中的浮点数b,显然需要9b的空间,但是
b=21×(+0.01001)=22×(+0.10010)
可以将b变成:0,10;0.1001,两个数在数值上等价,但是占用的空间更少。这个操作就称为 规格化

规格化目的: 充分利用尾数有效位 (其他还有:保证表示唯一,提高运算精度)。

定义:规定尾数的最高数位必须是一个有效值 。

规格化的方法有两种:

  • 左规:当浮点数运算的结果为非规格化时要进行规格化处理,
    将尾数左移一位,阶码减1(基数为2时)。

  • 右规:当浮点数运算的结果尾数出现溢出(双符号位为01或10)时,
    将尾数右移一位,阶码加1(基数为2时)

右规 例:a = 010;00.1100,b = 010;00.1000,求a+b
a=22×00.1100b=22×00.1000
a+b=22×00.1100+22×00.1000
=22×01.0100(溢出了,需要右归)
=23×00.1010

特点:

  • 规格化浮点数的尾数M的绝对值应满足:1r|M|<1
    当r=2 时 12|S|<1

  • 由于左归的原因是:尾数左边无效位太多,因此:左归可多位

  • 由于右归的原因是:尾数运算溢出是要进行右归,因此:右归最多一位

规格化数的判断

S>0 规格化形式 S<0 规格化形式
真值 0.1xxxx 真值 -0.1xxxx
原码 0.1xxxx 原码 1.1xxxx
补码 0.1xxxx 补码 1.0xxxx
反码 0.1xxxx 反码 1.0xxxx

特征:

  • 补码:符号位和第一位数不同
  • 原码:符号位正常,第一位数都是1

特例
[12] 不是规格化的数
[1] 规格化的数

浮点数数据范围

浮点数的数据范围如图:
image

其中

  • 上溢 就是指 需要表示的数大于最大正数或者小于最小负数,
    当出现上溢时,程序必须中断,否则就会带来错误结果。

  • 下溢 就是指 需要表示的数小于零且大于最大负数 或者 大于零且小于最小正数,
    当出现下溢时,程序只要将该数认为是0即可(即 机器零),没必要终止程序。

机器零

机器零就是指 可以让机器认为该数是0 的数。
有两种情况:

  • 当浮点数尾数为0时,不论其阶码为何值 都按机器零处理
  • 当浮点数阶码等于或小于它所表示的最小数时,不论尾数为何值,按机器零处理

⭐IEEE754标准浮点数

IEEE754标准浮点数是一个规范的浮点数表示规则,和上面的浮点数有区别,也有联系
image
和之前学习浮点数的区别是:

  • 数符 移动到阶码前面

  • 阶码 用移码表示(没有负数),没有 阶符

  • 尾数 是规格化的数,且规格化为 1.M (11.M2)

  • 尾数 隐藏表示最高位1(尾数是规格化后的数,最高位一定是1),也就是说:M=xx…x ,表示尾数=1.xx…x

IEEE754标准分为:32位浮点数(常用)和64位浮点数

image
规格化的短浮点数的真值为:(1)s×1.M×2E127
规格化长浮点数的真值为:(1)s×1.M×2E1023

数据范围:

格式 规格化的最小绝对值 规格化的最大绝对值
单精度 E=1,M=0:1.0×21127=2126 E=254,M=.11…1:1.111×2254127=2127×(2223)
双精度 E=1,M=0:1.0×211023=21022 E=2046,M=.11…1:1.111×220461023=21023×(2252)

32位浮点数的具体表示方法:
image

  • S:符号位,1位,在最高位,“0”表示正数,“1”表示负数。

  • E:阶码,8位,采用移码表示,偏移值是127。移码比较大小方便。
    E=e+127,具体来说就是:E=e+127;然后补(省略)到8位即可。

  • M:尾数, 23位,均为在低位部分,采用纯小数表示

  • 基数R=2,基数固定,采用隐含方式来表示它。

IEEE754标准的一些规定:(以32位 短浮点数 为例)

  • 当阶码E全为0,尾数M全为0时,表示真值±0

  • 当阶码E全为0,尾数M不全为0时,表示非规格化小数±(0.xxx)2×2126

  • 当阶码E全为1,尾数M全为0时,表示无穷大±∞

  • 当阶码E全为1,尾数M不全为0时,表示非数值“NaN” (Not a Number)

例子:用 IEEE 32 位浮点格式表示如下的数:-5
符号位:S=1
-5=101
规格化:101=1.01×22
阶码:E=2+127=129=10000001
尾数:010000...
因此整体就是
1 10000001 010000...

浮点数的加减运算

浮点数的加减运算运算步骤
0. 转换格式:将已知真值,转化为题目要求的浮点数

  1. 对阶
  2. 尾数求和
  3. 规格化
  4. 舍入
  5. 溢出判断

例: 已知十进制数X=−5/256、Y=+59/1024,按机器补码浮点运算规则计算X−Y,结果用二进制表示.
浮点数格式如下:阶符取2位,阶码取3位,数符取2位,尾数取9位

准备

按照题意将十进制数转化为浮点数。

  1. 转换格式:用补码表示阶码和尾数
    5D=101B1/256=28
    X=101×28=0.101×25=0.101×2101
    59D=111011B1/1024=210
    Y=+111011×210=+0.111011×24=+0.111011×2100
    X:11011,11.011000000 Y:11100,00.111011000

对阶:

对阶就是 使两个数的阶码相等。
方法是:小阶向大阶看齐,尾数毎右移一位,阶码加1。

(1)求阶差
image

① 求阶差:[ΔE]=11011+00100=11111,知ΔE=−1

(2)对阶

对阶原则 小阶向大阶看齐(小阶变大,小阶尾数右移)阶差为2,小阶右移两位阶差为1,小阶右移1位

② 对阶:X:11011,11.011000000
11100,11. 101100000 (X=0.0101×2100)

注意:

  • 补码且负数时:尾数右移时,补1
  • 补码且正数时:尾数右移时,补0

尾数求和

直接尾数求和即可。
注意:
x-y不容易计算,一般时转化成补码计算,
因为:[xy]=[x][y]=[x]+[y] 只需要计算加法即可。

image

规格化

如果尾数溢出,就进行右归。

注意: 此时的溢出不一定发生浮点数溢出。

上面x-y很明显发生了溢出
XY11100,10.11000100011101,11.011000100

舍入

在右规(对阶和规格化)过程中,尾数最低位的舍弃可能会引起误差,需考虑舍入处理:

  • “0”舍“1”入法:类似于十进制数运算中的“四舍五入”法,即在尾数右移时,被移去的最高数值位为0,则舍去;被移去的最高数值位为1,则在尾数的末位加1。这样做可能会使尾数又溢出,此时需再做一次右规。
  • 恒置“1”法:尾数右移时,不论丢掉的最高数值位是“1”还是“0”,都使右移后的尾数末位恒置“1”。这种方法同样有使尾数变大和变小的两种可能。

如果采用0舍1入法,则本次计算 无舍入

溢出判断

判断是不是常阶码,从而判断有无溢出。

常阶码,无溢出,结果真值为23×(0.1001111)2

字符和字符串

现在计算机不仅处理数值领域的问题,而且处理大量非数值领域的问题。比如人机交换信息时使用英文字母,标点符号等。上述信息必须编写成二进制格式的代码。

符号数据: 字符信息用数据表示,如ASCII等。

ASCII码

ASCII码是英文中经典的字符编码方式,用来表示 数字+英文字母+符号。

表示方式:
用一个字节来表示,低7位用来编码(128个),最高位为校验位。

其中:数字,大写字母,小写字母内部都是连续的,但是之间不连续。

  • 数字:48(0011 0000)~57(0011 1001
  • 大写字母:65(0100 0001)~90(0101 1010)
  • 小写字母:97(0110 0001)~122(0111 1010)

汉字的表示和编码

image

字符串

字符串的存放,就是将字符进行按顺序存放,但是存放方法有两种:

  • 大端模式:存储单元内先存储高位字节、后存储低位字节的顺序
  • 小端模式:存储单元内先存储低位字节、后存储高位字节的顺序

比如:存放字符串:IF A>B_THEN_READ(C) (每行代表一个存储单元,每个存储单元存放4B)
image

校验码(奇偶校验码)

引入原因:信息传输和处理过程中受到干扰和故障,容易出错跳变。但是无法判断出错。
方法:1.在有效信息中加入一些冗余信息(校验位)2.使码距不为1(百度吧)

校验码: 校验位+有效信息位。
image

奇校验码:整个校验码(有效信息位和校验位)中“1”的个数为奇数。
偶校验码:整个校验码(有效信息位和校验位)中“1”的个数为偶数

特点:

  • 只能检查出奇数个 位出错。
  • 仅需1位检验位。(再增加也无用:再对增加校验码后的数据,嵌套校验,会发现无效(本质是码距没有改变)
  • 不能纠正错误。

具体实现

x(x0x1xn1)是一个n位数字,
则奇校验位C定义为:Cx0x1xn1 ⊕代表按位加

  • 当x中包含有奇数个1时,使C=1,否则C=0。
  • 同理偶校验为 偶数个1时,才使C=0,否则C=1。

image

其它还有Hamming, CRC等,可以实现更多功能。

本文作者:kingwzun

本文链接:https://www.cnblogs.com/kingwz/p/16638839.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   kingwzun  阅读(327)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起