计算机组成学习-数据的表示和运算总结

 复习本章时,思考以下问题:

  • 1)在计算机中,为什么要采用二进制来表示数据?
  • 2)计算机在字长足够的情况下能够精确地表示每个数吗?若不能,请举例说明。
  • 3)字长相同的情况下,浮点数和定点数的表示范围与精度有什么区别?
  • 4)用移码表示浮点数的阶码有什么好处?

2、数据的表示与运算

 2.1、进制与编码

2.1.1 进位计数法

常用的进位计数法有十进制、二进制、八进制、十六进制等。十六进制每个 数位可取0〜9、A、B、C、D、E、F中的任意一个,其中A、B、C、D、E、F分别表示 10〜15。

八进制数字通常以前缀 "0"(零)加上数字表示,例如,八进制数 12 表示为 014。在JavaScript中,你可以使用前缀 "0o" 或 "0O" 来表示八进制数。例如:0o14

十六进制数字通常以前缀 "0x" 或 "0X" 开头表示,例如,十六进制数 1A 表示为 0x1A

2.1.2 不同进制数之间的相互转换

(1)二进制混合数转化为八进制或16进制

对于一个二进制混合数(既包含整数部分,又包含小数部分),在转换时应以小数点为界。 其整数部分,从小数点开始往左数,将一串二进制数分为3位(八进制)一组或4位(十六进制) 一组,在数的最左边可根据需要加“0”补齐;对于小数部分,从小数点开始往右数,也将一串 二进制数分为3位一组或4位一组,在数的最右边也可根据需要加“0”补齐。

(2) 十进制数转换为任意进制数

 (3)BCD码:二进制编码的十进制数

2.3 定点数的编码表示

定点数编码表示法主要有以下4种:原码、 补码、反码和移码。

1.3.1 原码

用机器数的最高位表示数的符号,其余各位表示数的绝对值。

真值零的原码表示有正零和负零两种形式,即[+0]原= 00000和[-0]原= 10000

1.3.2 反码

正数反码的定义和相应的补码(或原码)表示相同。负数反码的定义在绝对值按位求反。

0的表示不唯一(即存在正负0);

1.3.3 补码

对于正数,与原码的方式一样。对于负数,符号位取1,其余各位由真 值“各位取反,末位加1”得到。补码转换为真值,若符号位为0,与原码的方式一样。若符号位为1,真值的符号为负,数值部分各位由补码“各位取反,末位加1”得到。

 0的表示唯一

1.3.4 移码

移码就是在真值X上加上一个常数(偏置值)。如果机器字长为n,偏移值为2^{n-1}

 

2.4、运算方法和运算电路

(有需要再弄懂)

此ALU的核心是带标志加法器

2.5、整数的表示和运算

(有需要再弄懂)

有符号数和无符号数的转换

将short int强制转换为unsigned short 只改变数值,而两个变量对应的每位都是一样的。

不同字长整数之间的转换,当大字长变量向小字长变量强制类型转换时,系统把多余的高位部分直接截 断,低位直接赋值,因此也是一种保持位值的处理方法。而短字长到长字长的转换,在位值相等的条件下还要补充高位的符号位,可以理解为数值 的相等。

2.6、 浮点数的表示与运算

 浮点数的运算:1. 对阶,2. 尾数求和,3. 规格化,4. 舍人,5. 溢出判断

 2.7、校验码(数据校验)

  • 数据校验原因:为减少和避免数据在计算机系统运行或传送过程中发生错误,在数据的编码上提供了检错和纠错的支持。
  • 数据校验码的定义:能够发现某些错误或具有自动纠错能力的数据编码;
  • 数据校验的基本原理是扩大码距;码距为任意两个合法码之间不同的二进制位的最少位数;仅有一位不同时,称其码距为1。码距大于等于2的数据校验码开始具有检错的能力。码距越大,检错、纠错能力越强。

2.7.1、 奇偶校验码

  • 原编码上加一个校验位,码距等于2!一般校验位设置在原编码的最左边或最右边
  • 奇校验码:整个校验码(信息位+校验位)中1的个数位奇数
  • 偶校验码:整个校验码(信息位+校验位)中1的个数位偶数
  • 只能发现奇数个错误,不能纠错。
  • (1)奇校验
 (2)偶校验

2.7.2、海明校验码

在奇偶校验的基础上增加校验位而得;具有检错和纠错的能力;

设K为有效信息的位数,r为校验位的位数,则整个码字的位数N应满足不等式:N=K+r≦2r-1   通常称为(N,K)海明码设某(7,4)海明码表示的码字长度为   7   位,校验位数为     3 位。

  • 若S1S2S3=000,则说明无错,否则说明出错。这个数的值就是出错的位置,如S1S2S3=010,表示第010位出错,即H2出错,直接将该位取反就可以达到纠错的目的。

2.7.3、 循环冗余校验码(CRC)

在K位信息位后拼接R位检验位,组成CRC码,这种编码也称(N,R)码

通过模2的除法运算建立数据信息和校验位之间的约定关系;具有很强的检错纠错能力。
通过例题来理解

例题: 设生成多项式G(x)=X^3+X^2+1 ,信息码为 101001 ,求对应的CRC码 。

  •  首先,发送端和接受端会有一个生成多项式G(x)约定,生成多项式G(x)的最高次幂为R。任意一个二进制数码都可用一个系数为0或1的多项式与之对应。比如:二进制数码 1101 对应的G(x)=1*X^3+1*X^2+0*X^1+1*X^0= X3+X2+1  检验位为3
  • 在发送端,将要传送的K位二进制信息码左移R位,低位补0。将它与生成多项式G(x)所对应的的二进制数码进行模2除法,除数位多项式系数( 1101),产生余数( 3位检验位)位一个R位检验码,并附在信息码后,构成一个新的二进制码(CRC)码,共K+R位。

  • 接收端收到CRC码后,用生成的CRC码除以生成多项式G(x)所对应的的二进制数码,若余数为0,则信息码在传输过程中没有产生错误,数据正确。
  • 若接受到的CRC码为C9C8C7C6C5C4C3C2C1= 101001011,除以G(x)所对应的二进制码1101得到余数为010,不为0,说明数据在传输过程中产生错误。010=2(10)说明C2出错,将C2取反即可纠正错误。

2.8、复习

2.8.1、为什么要采用二进制来表示数据?

采用二进制,只有0和1两个状态,能够表示0、1两种状态的电子器件很多。而且简化,电平变化明显。

2.8.2、计算机在字长足够的情况下能够精确地表示每个数吗?若不能,请举例说明。

计算机采用二进制来表示数据,在字长足够时,可以表示任何一个整数。

而二进制表示小数,即使字长很长,也不可能精确表示出所有小数,只能无限逼近。例如0.1就无法用二进制精确地表示。

2.8.3、字长相同的情况下,浮点数和定点数的表示范围与精度有什么区别?

字长相同时,浮点数取字长的一部分作为阶码,所以表示范围比定点数要大,而取一部分作为阶码也就代表着尾数部位的有效位数减少,而定点数字长的全部位都用来表示数值本身,精度要比同字长的浮点数更大

编码位数一定,编码出来的数据个数就是一定的。m位编码只能表示2m个数,所以对于相同位数的定点数和浮点数来说,可表示的数据个数应该一样多。

2.8.4、用移码表示浮点数的阶码有什么好处?

移码的两个好处
浮点数进行加减运算时,时常要比较阶码的大小,相对于原码和补码,移码比较大小更方便
②检验移码的特殊值(0和max)时比较容易。

2.8.5、如何表示一个数值数据?计算机中的数値数据都是二进制数吗?

计算机中的数值数据虽然都用二进制来编码表示,但不全是二进制数,也有用十进制数(二进制编码的十进制数)表示的

2.8.6、在高级语言编程中所定义的 unsigned/short/int/long/float/double型数据是怎么表示的?什么称为无符号整数的“溢出”?

unsigned型数据就是无符号整数,不考虑符号位。直接用全部二进制位对数值进行编码得到的就是无符号数,一般都用补码表示。

int型数据就是定点整数,一般用补码表示。int型数据的位数与运行平台和编译器有关,一般是32位或16位。例如,真值是-12的int型整数,在机器内存储的机器数(假定用32位寄存器寄存)是1111-1111-1111-1111-1111-1111-1111-0100

long型数据和short型数据也都是定点整数,只是位数不同,分别是长整型和短整型数,通常用补码表示。

float型数据是用来表示实数的浮点数。现代计算机用IEEE754标准表示浮点数,其中32位单精度浮点数就是float型,64位双精度浮点数就是 double型。

需要注意的是,C语言中的int型和 unsigned型变量的存储方式没有区别,都按照补码的形式存储,在不溢出范围内的加减法运算也是相同的,只是int型变量的最高位代表符号位,而unsigned型中的最高位表示数值位,两者在C语言中的区别体现在输出时到底是采用%d还是采用%u。

对于无符号定点整数来说,若寄存器位数不够,则计算机运算过程中一般保留低n位,舍弃高位。这样,会产生以下两种结果。
①保留的低n位数不能正确表示运算结果。在这种情况下,意味着运算的结果超出了计算机所能表达的范围,有效数值进到了第n+1位,称此时发生了“溢出”现象
②保留的低n位数能正确表达计算结果,即高位的舍去并不影响其运算结果。

如何判断一个浮点数是否是规格化数?

为了使浮点数能尽量多地表示有效位数,一般要求运算结果用规格化数形式表示“规格化浮点数的尾数小数点后的第一位一定是个非零数。因此,对于原码编码的尾数来说,只要看尾数的第一位是否为1就行

2.8.7、浮点数如何进行舍入?

舍入方法选择的原则是:①尽量使误差范围对称,使得平均误差为0,即有舍有入,以防误差积累。②方法要简单,以加快速度。
IEEE754有4种舍入方式。
①就近舍入:舍入为最近可表示的数,若结果值正好落在两个可表示数的中间,则一般选择舍入结果为偶数。
②正向舍入:朝+∞方向舍入,即取右边的那个数
③负向舍入:朝-∞方向舍入,即取左边的那个数。
④截去:朝0方向舍入,即取绝对值较小的那个数

2.8.8、代计算机中是否要考虑原码加减运算?如何实现?

因为现代计算机中浮点数采用IEEE754标准,所以在进行两个浮点数的加减运算时,必须考虑原码的加减运算,因为IEEE754规定浮点数的尾数都用原码表示。
原码的加减运算可以有以下两种实现方式
1)转换为补码后,用补码加减法实现,结果再转换为原码。
2)直接用原码进行加减运算,符号和数值部分分开进行(具体过程见原码加减运算部分)。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值