【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),它们互相转换的规则如下:

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

(二)编码表示

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

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

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

(三)类型转换

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

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

(四)运算部件

1.加减法

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

1)加法器标志

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

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

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

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

2.乘除法

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

1)乘法逻辑电路

在这里插入图片描述

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的整数倍,这样无论所取的数据是字节、半字还是字,均可一次访存取出。当所存数据不满足上述要求时,可通过填充空白字节使其符合要求。

写在后面

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

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

相关推荐

  1. shell关于使用

    2024-07-14 02:22:01       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 02:22:01       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 02:22:01       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 02:22:01       57 阅读
  4. Python语言-面向对象

    2024-07-14 02:22:01       68 阅读

热门阅读

  1. Android系统实现多网共存且能独立上外网

    2024-07-14 02:22:01       20 阅读
  2. 文件上传到阿里云

    2024-07-14 02:22:01       18 阅读
  3. 系统服务综合案例

    2024-07-14 02:22:01       18 阅读
  4. 面试迟到了怎么办

    2024-07-14 02:22:01       18 阅读
  5. python +=d的底层实现

    2024-07-14 02:22:01       15 阅读
  6. Vue3 watch与watchEffect的区别

    2024-07-14 02:22:01       19 阅读
  7. Shell学习day1

    2024-07-14 02:22:01       18 阅读
  8. QML教程-10分钟一口气快速掌握QML基础元素

    2024-07-14 02:22:01       17 阅读
  9. 代码随想录算法训练营第31天 | 第九章动态规划02

    2024-07-14 02:22:01       21 阅读
  10. ES6 Class 的继承(十一)

    2024-07-14 02:22:01       21 阅读