【408精华知识】计组中关于数据的考察

在这里插入图片描述

观历年统考真题,不难发现 unsigned、short、int、long、float、double等在C语言中的表示、运算、溢出判断、隐式类型转换、强制类型转换、IEEE754浮点数的表示,以及浮点数的运算,都是考研考查的重点,不仅在选择中考频较高,在大题中也经常考,因此需要牢固掌握。
总结来看,无非是对两种数据类型的操作:定点数和浮点数,其中定点数包含定点整数和定点小数,定点整数又可表示为无符号整数和有符号整数,本文我们着重讨论定点整数和浮点数
其中定点整数包括:char(1B)、(unsigned)short(2B)、(unsigned)int(4B)、(unsigned)long(4/8B)、(unsigned)longlong(8B),浮点数包括float(4B)、double(8B)

一、定点整数

(一)数制转换

常用的数制主要有四种:十进制(D)、二进制(B)、八进制(O)、十六进制(H),进制的英文表示如下:

进制英文表示
二进制B,Binary
八进制O,Octal
十进制D,Decimal
十六进制H,Hex

它们互相转换的规则如下:

进制转换转换规则进制转换转换规则
二进制->十进制按权累加十进制->二进制整数位除留取余,小数位乘积取整
二进制->八或十六进制凑位转换八或十六进制->二进制按位重写
十进制->八或十六进制先转二进制八或十六进制->十进制按权累加
八进制->十六进制先转二进制十六进制->八进制先转二进制

(二)编码表示

无符号整数省略了一位符号位,所以在字长相同的情况下,它能表示的最大数比有符号整数能表示的大。一般在全部是正数运算且不出现负值结果的场合下,使用无符号整数表示。

有符号整数可以采用不同的编码方式,包括原码、反码、补码、移码四种,它们的特点如下:

编码方式特点表示范围(字长n+1位)
原码最高位表示数的符号,其余各位表示数的绝对值-(2n-1)~2n-1
反码正数的反码和原码相同,负数的反码等于各位取反同原码
补码正数的补码和原码相同,负数的补码等于各位取反+1-2n~2n-1
移码在真值上加上一个偏置值——

(三)类型转换

不同数据类型在不同机器上的大小(常用32位机器):

数据类型16位机器32位机器64位机器
char1B1B1B
short2B2B2B
int2B4B4B
long4B4B8B
longlong8B8B8B
float2B4B4B
double8B8B8B

C 语言允许在不同的数据类型之间做类型转换,转换规则基于两种数据类型的长度,除float、double外的具体转换规则如下:

方式规则
长度相同直接改变解释方式
短变长先扩展(有符号整数符号扩展、无符号整数零扩展)再解释
长变短先截短(留低位)再解释

若将float、double转换为int,小数位部分会被舍去;int是精确到32位的整数,而float只保存到1+23位,因此一个32位的int整数在转换为float时可能会有损失,转换为double不会损失。

(四)运算部件

1.加减法

加减法的运算部件是加法器,是ALU最主要的部分:
在这里插入图片描述
无符号整数相当于正整数的补码表示,因此图中的电路同时也能实现无符号数的加/减运算,对于有符号数x和y,图中X和Y分别是x和y的补码表示;对于无符号数x和y,图中X和Y分别是x和y的二进制表示。不论是补码减法还是无符号数减法,都是用被减数加上减数的负数的补码来实现的。

在这里插入图片描述

注意以下几点

  1. 无论是从原码变成补码还是从补码变成原码,都是符号位不变、数值部分取反加一
  2. 从y变成(-y),遵循符号位取反、数值位取反加一,这个规则适用于x-y转化为x+(-y)
  3. int型负数x在被当作无符号数时,其值为232-|x|。
1)加法器标志

在这里插入图片描述
假设:某字长为8位的计算机中,带符号整数采用补码表示,数据存放在寄存器A和B中(可用A7—A0表示寄存器A的最高位到最低位),计算结果存储在C中(可用C7—C0表示寄存器A的最高位到最低位),加法器最高位进位用Fout表示。

常考带标志加法器,务必牢记各个标志的含义以及表达式

标志适用含义表达式
OF(overflow)带符号整数溢出标志在这里插入图片描述
SF(sign)带符号整数符号标志在这里插入图片描述
ZF(zero)无、带符号整数零标志在这里插入图片描述
CF(carry)无符号整数进位标志在这里插入图片描述

关于OF的计算,详见下图:
在这里插入图片描述

注意,ALU生成标志位时只负责计算,不管运算对象是有符号数还是无符号数,那么OF表示将运算数当作有符号数时是否溢出,CF表示在将运算数当作无符号数时是否发生进位/借位。

条件转移指令的判断可借助标志位:

在这里插入图片描述

2)移位运算

移位分为逻辑移位和算术移位,逻辑移位不考虑符号,算术移位考虑符号

移位方式规则
逻辑移位左移时,高位移出,低位补 0;右移时,低位移出,高位补0。
算术移位左移时,高位移出,低位补 0,若移出的高位不同于移位后的符号位,即左移前后的符号位不同,则发生溢出;右移时,低位移出,高位补符号位,若低位的1移出,则影响精度。
3)溢出判断
符号位数判断方法
一位符号位在这里插入图片描述
两位符号位在这里插入图片描述

2.乘除法

乘除法仅需掌握运算思想即可。

1)乘法逻辑电路

在这里插入图片描述
需要注意乘法溢出的判断(n位乘法):

  1. 带符号整数乘法运算溢出判断,高n+1位是否全1/全0
  2. 无符号整数乘法运算溢出判断,高n位是否均为0
2)除法逻辑电路

在这里插入图片描述

二、浮点数

(一)IEEE 754标准

浮点数最常考的就是IEEE 754 标准,因此要谨记其格式:
在这里插入图片描述
单精度格式中包含1位符号s、8位阶码e和23位尾数f,双精度格式包含1位符号s、11位阶码e和52位尾数f,基数隐含为2,尾数用原码表示。

注意以下几点
1)单精度和双精度浮点数的偏置值分别为127和1023,在存储浮点数阶码之前,偏置值要先加到阶码真值上,且阶码全1代表无穷,全0代表0
2)尾数的最高位总是1,为了能使尾数多表示一位有效位,将这个1隐藏,称为隐藏位,因此23位尾数实际表示了24位有效数字。

因此在该标准下,规格化单精度浮点数的真值为:

(-1)s x 1.f x 2e-127

规格化双精度浮点数的真值为:

(-1)s x 1.f x 2e-1023

int、float、double三种数据类型的表示范围如下:

类型表示范围
int-231~(231-1)
float(+/-)[2-126~(2-2-23)*2127]
double(+/-)[(2-1022~(2-2-52)*21023]

若将float、double转换为int,小数位部分会被舍去;int是精确到32位的整数,而float只保存到1+23位,因此一个32位的int整数在转换为float时可能会有损失,转换为double不会损失。

(二)数据存储

1.大端小端存储

数据存储方式有大端存储和小端存储两种:

1)大端方式:先存储高位字节,后存储低位字节。字中的字节顺序和原序列的相同
2)小端方式:先存储低位字节,后存储高位字节。字中的字节顺序和原序列的相反

2.边界对齐存储

现代计算机都是按字节编址的,假设字长为32 位,数据按边界对齐方式存放要求其存储地址是自身大小的整数倍,半字地址一定是2的整数倍,字地址一定是4的整数倍,这样无论所取的数据是字节、半字还是字,均可一次访存取出。当所存数据不满足上述要求时,可通过填充空白字节使其符合要求。

(三)运算术语

浮点数运算中的一些术语:

对阶小阶变大阶。浮点数加/减运算时,在尾数相加/减之前所进行的操作称为对阶。对阶时,需要比较两个阶的大小,阶小的那个数的尾数右移,阶码增量。右移一次,阶码加1,直到两数的阶码相等为止。

左规:在浮点数运算中,当一个尾数的数值部分的高位出现0时,尾数为非规格化形式。此时,进行“左规”操作:尾数左移一位,阶码减1,直到尾数为规格化形式为止。

右规:在浮点数运算中,当尾数最高有效位有进位时,发生尾数溢出。此时,进行“右规”操作:尾数右移一位,阶码加1,直到尾数为规格化形式为止。右规过程中,要判断是否发生溢出。此时,只要阶码不发生上溢,则浮点数不会溢出。

舍入:舍入是指数值数据右部的低位数据需要丢弃时,为保证丢弃后数值误差尽量小而考虑的一种操作。有两种舍入方式,一种是0舍1入法,一种是恒置1法。0舍1入法,尾数右移时,若被移去的最高位数值为0,则舍去;若被移去的最高位数值为1,则在末位加1,由于这样可能导致尾数溢出,因此可能还需要再右归。在定点整数“右移”时、浮点加/减运算中某数“对阶”时、浮点运算结果“右规”时都会涉及到舍入。

溢出:溢出是指一个数比给定的格式所能表示的最大值还要大 (上溢),或比最小值还要小 (下溢) 的现象。因为无符号数、有符号定点数和有符号浮点数的位数是有限的,所以,都有可能发生溢出,但判断溢出的具体方法不同。

上溢:在浮点数运算中,当一个浮点数的指数超过了最大允许值,此时,浮点数发生上溢(即:向∞方向溢出)。如果结果是正数,则发生正上溢(有的机器把值置为+∞);如果是负数,则发生负上溢(有的机器把值置为-∞)。这种情况为软件故障,通常要引入溢出故障处理程序来处理。

下溢:在浮点数运算中,当一个浮点数的指数比最小允许值还小,此时,浮点数发生下溢。一般机器把下溢时的值置为0。此时,不发生溢出故障。

写在后面

这个专栏主要是我在学习408真题的过程中总结的一些笔记,因为我学的也很一般,如果有错误和不足之处,还望大家在评论区指出。希望能给大家的学习带来一点帮助,共同进步!!!

参考资料
[1]王道408教材(2025版)
[2]王道课程资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值