导图社区 2、数据的表示及运算
本图整理了计算机中数据的表示、校验码、逻辑代数及逻辑运算、机器数的运算,后续我还会发更多计算机相关内容,让我们一起天天向上吧。
编辑于2023-04-03 15:34:342、数据的表示及运算
计算机中数据的表示
进位计数制及其转换
在采用进位计数的数字系统中,如果只用r个基本符号表示数值,则称其为r进制,r称为该进制的基数。计算机中常用的有二进制、八进制、十进制和十六进制
二进制
规则
逢二进一
基数
r=2
数符
0,1
权
2^i
形式表示符
B
1,2,4,8,16,32,64,128,256,512,1024,2048,4096.....
八进制
规则
逢八进一
基数
r=8
数符
0,1,2,3,4,5,6,7
权
8^i
形式表示符
O
1,8,64,512,4096,32768,262144,2097152,16777216.....
十进制
规则
逢十进一
基数
r=10
数符
0,1,2,3,4,5,6,7,8,9
权
10^i
形式表示符
D
1,10,100,1000,10000,100000,1000000,10000000.....
十六进制
规则
逢十六进一
基数
r=16
数符
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
权
16^i
形式表示符
H
1,16,256,4096,65536,1048576,16777216,268435456.....
二进制运算规则
加法
0+0=0
1+0=1
0+1=1
1+1=0(有进位)
减法
0-0=0
1-0=1
1-1=0
0-1=1(有借位)
乘法
0*0=0
1*0=0
0*1=0
1*1=1
机器数和码制
原码
最高位为符号位(0为正,1为负),其它位为数值的绝对值
反码
同原码,但为负数时,绝对值按位求反
补码
同补码,但为负数时,绝对值+1
移码
同原码,但有偏移量,码值大者对应的真值就大
定点数和浮点数
定点数
表示数据时小数点的位置不变
定点整数
纯整数,小数点在最低有效数值位之后
定点小数
纯小数,小数点在最高有效数值位之前
范围
当机器字长为n时,定点数的补码和移码可表示2^n个数,而其原码和反码只能表示2^n-1个数,因此,定点数所能表示的数值范围比较小,运算中很容易因结果超出范围而溢出。
浮点数
表示数据时小数点的位置可变
浮点表示法一般的形式:N=2^E*F(N为二进制数,E为阶码,F为尾数)
阶符
决定小数点向左还是向右移动(0向左,1向右)
阶码
决定小数点移动的位数和数值范围
数符
决定数值的正负
尾数
决定数值的精度
浮点数的规格化
若尾数F≥0,则其规格化的尾数形式为F=01xxx....x,其中x为0,也可为1,将尾数F的范围限定在区间[0.5,1)。
若尾数F<0,则其规格化的尾数形式为F=10xxx....x,其中x为0,也可为1,将尾数F的范围限定在区间(-1,-0.5]。
工业标准IEEE754
单精度浮点数
浮点数字长
32
尾数长度
23
符号位长度
1
阶码长度
8
指数偏移量
+127
可表示的实数范围
10^-38——10^38
双精度浮点数
浮点数字长
64
尾数长度
52
符号位长度
1
阶码长度
11
指数偏移量
+1023
可表示的实数范围
10^-308——10^308
扩充精度浮点数
浮点数字长
80
尾数长度
64
符号位长度
1
阶码长度
15
指数偏移量
+16383
可表示的实数范围
10^-4932——10^4932
十进制数与字符的编码表示
数字、文字和英文字母等都被认为是字符,任何字符被录入计算机后都必须转换成二进制表示形式,称为字符编码。常用的有8421BCD码、余3BCD码、格雷码。
8421BCD码
应用最多的有权码,即4个二进制位的权从高到低分别为8、4、2和1。
余3BCD码
常用的无权码之一,在8423码的基础上,把每个数的代码加上0011后构成的。
格雷码
最常用的无权码之一,相邻的两个代码之间只有一位不同。
ASCLL码
是一种国际通用的信息交换标准代码,采用7二进制位即d6d5d4d3d2d1d0对字符进行编码,低4位组d3d2d1d0用作行代码,高3位组d6d5d4用作列编码。
汉字编码
输入码
数字编码
用数字串代表一个汉字的输入,常用的是国标区位码。
拼音码
以汉语读音为基础的输入方法。
字形编码
以汉字的形状确定的编码。
内部码
简称汉字内码,是汉字在设备和信息处理系统内部存储、处理、传输汉字用的代码。
字形码
又称字模码,表示汉字字形的字模数据,通常用点阵、矢量函数等方式表示,用点阵表示字形时,字形码指的就是这个汉字字形点阵的代码。
Unicode
为整合全世界的所有语言文字而诞生。任何一个文字在Unicode中都对应一个值,这个值称为代码点(code point)
UCS(Universal Coded Character Set)
UCS-2
用2个字节表示代码点,其取值范围是U+0000——U+FFFF。
UCS-4
用4个字节表示代码点,其取值范围是U+00000000——U+7FFFFFFF。
UCS-2和UCS-4只规定了代码点和文字之间的关系,并没有规定代码点和文字在计算机中如何存储。
Unicode(UCS Transformation Format,又称统一码、万国码、单一码)
UTF-8
为了解决UTF-16和UTF-32表示纯ASCLL文件时会造成浪费的问题,使用1—4个字节来表示一个代码点,而且不需要BOM字节。
UTF-16
使用2个字节来表示一个代码点,完全对应于UCS-2。
UTF-32
使用4个字节来表示一个代码点,完全对应于UCS-4。
规定了代码点和文字在计算机中如何存储。
校验码
计算机运行时,各个部件之间要进行数据交换,为了确保数据在传送过程中正确无误,一是提高硬件电路的可靠性;二是提高代码的校验能力,包括查错和纠错。通常使用校验码的方法来检测传送的数据是否出错,即对数据可能出现的编码分为两类:合法编码和错误编码。合法编码用于传送数据,错误编码是不允许在数据中出现的编码。合理地设计错误编码以及编码规则,使得数据在传送过程中出现某种错误时就会变成错误编码,这样就可以检测出接收到的数据是否有错。
奇偶校验码
是一种简单有效的检验方法。通过在编码中增加一个校验位来使编码中1的个数为奇数(奇校验)或偶数(偶校验),从而使码距变为2。可以检测出错误,但不能校正错误。
水平奇偶校验码
垂直奇偶校验码
水平垂直校验码
海明码
利用奇偶性来检错和纠错的校验方法。在数据位之间插入k个校验位,通过扩大码距来实现检测和纠错。
校验位设置在2^i的位置,每个校验位只校验数据位中位置号的二进制号和自身位置号的二进制编码相匹配的数据位。
对于8位的数据位,进行海明码校验需要4个校验位,令数据位为D7—D0,校验位为P4—P1,形成的海明码为H12——H1。如下: H12 H11 H10 H9 H8 H7 H6 H5 H4 H3 H2 H1 D7 D6 D5 D4 P4 D3 D2 D1 P3 D0 P2 P1 通过偶校验确定各校验位的值: P1=D0⊕D1⊕D3⊕D4⊕D6 P2=D0⊕D2⊕D3⊕D5⊕D6 P3=D1⊕D2⊕D3⊕D7 P4=D4⊕D5⊕D6⊕D7 "⊕"符号为异或,即判断两个数是否不相同,不相同为1,相同为0。 若采用奇校验,则将各校验位的偶校验值取反即可。 检验错误: G1=P1⊕D0⊕D1⊕D3⊕D4⊕D6 G2=P2⊕D0⊕D2⊕D3⊕D5⊕D6 G3=P3⊕D1⊕D2⊕D3⊕D7 G4=P4⊕D4⊕D5⊕D6⊕D7 当G4G3G2G1全为0时(奇校验则全为1),表示接收到的数据无错误。 若不全为0(奇校验不全为1)时,G4G3G2G1的十进制值指出发生错误的位置,将其取反即可纠错。
循环冗余校验码
广泛运用于数据通信领域和磁介质存储系统中。它利用生成多项式为k个数据位产生r个校验位来进行编码,其代码长度为k+r。校验位越长,该代码的校验能力就越强。
由两部分组成,左边为信息码(数据),右边为校验码。若信息码占k位,则校验码占n-k位,其中n为CRC码的字长,所以又称为(n,k)码。在求CRC编码时采用模2运算,模2运算的规则是:按位运算,不发生借位和进位。
逻辑代数及逻辑运算
基本的逻辑运算
“与”运算
又称逻辑乘,常用的符号为:AND、∩、∧、·
当两个逻辑变量A和B都为真时,A“与”B的值才为真,否则为假。
“或”运算
又称逻辑加,常用的符号为:OR、∪、∨、+
当两个逻辑变量A和B之中有一个为真时,A“或”B的值就为真,否则为假。
“非”运算
又称求反运算,常用的符号为:﹣(在逻辑变量的头上)
当一个逻辑变量A为真时,A求反后,A则为假。
“异或”运算
又称半加运算,常用的符号为XOR、⊕
判断两个逻辑变量是否不相同,不相同为真,相同为假。
常用的的逻辑公式
交换律
A+B=B+A
A·B=B·A
结合律
A+(B+C)=(A+B)+C
A·(B·C)=(A·B)·C
分配律
A·(B+C)=A·B+A·C
A+(B·C)=(A+B)·(A+C)
反演律
`A +`B =`A ·`B
`A ·`B =`A +`B
重叠律
A+A=A
A·A=A
互补律
`A+A=1
`A·A=0
吸收律
A+`A·B=A+B
0-1律
0+A=A
0·A=0
1+A=1
1·A=A
对合律
`A(应是双上划线,即求反后再求反)=A
其他公式
A·B + A`B =A
A+A·B=A
A·B +`AC +BC = AB +`AC
`A ⊕`B = `A ⊕ B= A ⊕`B
逻辑表达式及其简化
通过列真值表来寻找规律或运用常用的逻辑公式来简化逻辑表达式
机器数的运算
机器数的加减运算
在计算机中,可以只设置加法器,而将减法运算转换为加法运算来实现。
原码加、减法
当两个相同符号的原码数相加时,只需将数值部分直接相加,运算结果的符号与两个加数的符号相同。
若两个加数的符号相异,则应进行减法运算。其方法是:先比较两个数绝对值的大小,然后用绝对值大者减去绝对值小者的绝对值,结果的符号取绝对值大者的符号。因此,原码的减法运算是很麻烦的,所以在计算机中很少被采用。
补码加、减法
补码加法的运算法则是:和的补码等于补码的求和,即[X+Y]补=[X]补[Y]补。
补码减法的方法是:差的补码等于被减数的补码加上减数取负后的补码。因此,在补码表示中,可将减法运算转换为加法运算,即[X-Y]补=[X]补+[-Y]补。
由[X]补求[-X]补的方法是:[X]补的各位取反(包括符号位),末尾+1。
溢出及判定
在确定了运算的字长和数据的表示方法之后,数据的范围也就确定了。一但运算结果超出所能表示的数据范围,就会发生溢出。发生溢出时,运算结果肯定是错误的。(只有当两个相同符号的数相加(或两个相异符号数相减)时,运算结果才有可能溢出。)
机器数的乘除运算
在计算机中实现乘除法运算,通常有如下几种方式:
纯软件方案,在只有加法器的低档计算机中,没有乘除法指令,乘除运算是用程序来完成的。这种方案的硬件结构简单,但做乘除运算时速度很慢。
在现有的能够完成加减运算的算术逻辑单元ALU的基础上,通过增加少量的实现左、右移位的逻辑电路,来实现乘除运算。与纯软件方案相比,这种方案增加硬件不多,而乘除运算的速度有了较大提高。
设置专用的硬件阵列乘法器(或除法器),完成乘(除)法运算。该方案需付出较高的硬件代价,可获得最快的执行速度。
浮点运算
浮点的加减运算
设有浮点数X=M×2^i,Y=N×2^i,求X±Y的运算过程如下:
对阶
使两个数的阶码相同。令K=|i-j|,把阶码小的数的尾数右移K位,使其阶码加上K。
求尾数和(差)。
结构规格化并判溢出
若运算结果所得的尾数不是规格化的数,则需要进行规格化处理。当尾数溢出时,需要调整阶码。
舍入
在对结果进行右移时,尾数的最低位将因移除而丢掉。另外,在对阶过程中也会将尾数右移使最低位丢掉。这就需要进行舍入处理,以求得最小的运算误差。舍入的方法有:
截断法
将要保留的数据末位右边的数据全都截去,不管数据是0还是1。
末位恒1法
将要保留的末位数据恒置1,不管右移丢掉的数据是0还是1。
0舍1入法
舍去的数据为0时,保持末位原始状态。若舍去的数据为1,则将末位加1。这类似与十进制中的四舍五入。但当数据为0.11111,即在尾数全为1的特殊情况下,这种舍入会再次产生溢出。遇到这种情况可用硬件判断,并在舍去1时末位不在加1。
溢出判别
以阶码为准。若阶码溢出(超过最大值),则运算结果溢出;若阶码下溢(小于最小值),则结果为0,否则结果正确无溢出。
浮点的乘除运算
浮点数相乘,其阶码等于两乘数的阶码相加,积的尾数等于两乘数的尾数相乘。浮点数相除,其商的阶码等于被除数的阶码减去除数的阶码,商的尾数等于被除数的尾数除以除数的尾数。乘除运算的结果都需要进行规格化处理并判断阶码是否溢出。