数据的表示和运算

284 阅读4分钟

「这是我参与2022首次更文挑战的第31天,活动详情查看:2022首次更文挑战」。

数制和编码

二进制编码是计算机内部的主要数据形式,它的两种形态0,1简单容易实现。

当碰到数制转换时,我们通常有二、八、十、十六四种进制形式,采用进位记数法进行换算。

真值和机器数:

真值是机器数代表的实际值。机器数是把真值的符号数字化,用计算机存储起来,方便运算。
还有BCD码,用二进制来表示十进制数字,非常常用。
ASCll码:在计算机中非常重要,前0-31表示控制字符;32表示空格;33-126表示可印刷字符;127DEL。
汉字编码也是常用的编码方式,在我们写程序的过程中往往会碰到一些汉字,编译后变成乱码,这就可能是为将其编码、解码导致。
汉字编码中的区位码:矩阵形式,由4位十进制数构成,前2位区码,后2位位码。

校验码:用于自动纠错。任意两个合法吗之间最少变化的二进制位数叫码距。码距越大,检错能力越强。其检错能力大于纠错能力。

奇偶校验原理:在原码上添加一位,添加后使1的个数为奇数的就叫奇校验,为偶数的就叫偶校验。这种方法只能检错不能纠错。
海明校验:多重奇偶校验,分组偶校验。2位检错,1位纠错。
CRC循环冗余校验:在K位二进制后加R位校验码,这在计网中有提到。

定点数的表示和运算

移位运算

算数移位:符号位不变,数值位移动(反码补1,补码移位高位补1,低位补0)。

逻辑移位:将操作数视为无符号数,全移。

循环移位:带进位标志位CF,CF参与循环,不带CF,CF存储最新移出的数字的副本。

溢出问题

当一位符号位溢出时,参与操作的两个数符号相同,结果符号不同,则溢出。 当双符号位溢出时,符号位两个数字不同,则溢出。

C语言中整数类型和类型转换

强制类型转换不改变任何二进制数,只改变解释数值的方式。

数据存储和排列

大端方式和小端方式:从左到右越来越大,称作大端,反之称为小端。 边界对齐的目的是一次访存取出,提高指令效率,但会造成存储空间的浪费。

浮点数的表示和运算

阶符:阶码的正负性。
阶码:指数部分。
数符:数字的符号。
尾数:数字部分。

在计算时我们要调整尾数和阶码,保证尾数最高位是有效值,提高运算精度,充分利用尾数有效位。

对于原码和编码的尾数,只要看尾数第一位是否为1;对于补码编码的尾数,要看符号位和尾数最高位是否相反。

在浮点数的运算中,尾数运算结果溢出并不代表浮点运算结果溢出,右归后根据阶码再来判断是否溢出。

c语言中的浮点数

int转float时,不会溢出,但是int可以保留32位,float保留24位,所以可能会有舍入。

int 、float转double时就比较精确了。

double转float时,可能溢,可能舍入。

double、float转int,若int无小数,可能被截断,可能会溢出。

算数逻辑单元ALU

它的主要作用就是进行运算,加减乘除,与或非,移位,求补等都可。

加法器

一位全加器:

两个加数,一个进位,共三个输入。
一个和,一个进位,共两个输出。

串行加法器:

只有一个全加器,输出后再送回给自己。

并行加法器:

多个全加器组成,有串行进位加法器和并行进位加法器。

这个ALU主要是CPU的执行单元,主要就是做运算的,之前说的CPU是运算器和控制器的结合,ALU就是这个运算器中的一部分。