26考研——数据的表示和运算_整数和实数的表示(2)
408答疑
文章目录
- 二、整数和实数的表示
- 1、整数的表示
- 1.1、无符号整数的表示
- 1.2、有符号整数的表示
- 1.3、C 语言中的整数类型及类型转换
- 1.3.1、C 语言中的整型数据类型
- 1.3.2、有符号数和无符号数的转换
- 1.3.3、不同字长整数之间的转换
- 2、实数的表示
- 2.1、浮点数的相关概念
- 2.2、浮点数的表示格式
- 2.3、浮点数的规格化
- 2.4、IEEE 754 标准
- 2.4.1、IEEE 754 单精度数大小的比较
- 2.4.2、IEEE 754 标准中的指数表示
- 2.4.3、规格化浮点数的真值
- 2.4.4、特殊情况
- 2.4.5、示例分析
- 2.5、C 语言中的浮点数类型
- 四、参考资料
- 鲍鱼科技课件
- 26王道考研书
二、整数和实数的表示
1、整数的表示
1.1、无符号整数的表示
- 当一个编码的全部二进制位均为数值位而没有符号位时,该编码表示就是无符号整数,简称无符号数。此时,默认数的符号为正。
- 因为无符号整数省略了一位符号位,所以在字长相同的情况下,它能表示的最大数比有符号整数能表示的大。一般在全部是正数运算且不出现负值结果的场合下,使用无符号整数表示。
- 例如,可用无符号整数进行地址运算,或用它来表示指针。
- 此外,对 8 位无符号整数,最小数为
0000 0000
(值为 0),最大数为1111 1111
(值为 2 8 − 1 = 255 2^8 - 1 = 255 28−1=255),即表示范围为 0 ∼ 255 0\sim255 0∼255;而对于 8 位有符号整数(补码表示),最小数为1000 0000
(值为 − 2 7 = − 128 -2^7 = -128 −27=−128),最大数为0111 1111
(值为 2 7 − 1 = 127 2^7 - 1 = 127 27−1=127),即表示范围为 − 128 ∼ 127 -128\sim127 −128∼127。 - 特点:
- 无符号整数省略了一位符号位,因此在字长相同的情况下,它能表示的最大数比有符号整数能表示的大。
- 无符号整数一般用于全是正数运算且不出现负值结果的场合。
1.2、有符号整数的表示
-
将符号数值化,并将符号位放在有效数字的前面,就组成了有符号整数。虽然前面介绍的原码、补码、反码和移码都可以用来表示有符号整数,但补码表示有其明显的优势。
-
补码表示法在计算机系统中被广泛采用,其主要优势包括:
-
0 的补码表示唯一:与原码和反码相比,0 的补码表示唯一。
-
运算规则简单:与原码和移码相比,补码运算规则比较简单,且符号位可以和数值位一起参加运算。
-
表示范围更广:与原码和反码相比,补码比原码和反码多表示一个最小负数。
-
-
表示范围:计算机中的有符号整数都用补码表示,所以 n n n 位有符号整数的表示范围是 − 2 n − 1 ∼ 2 n − 1 − 1 -2^{n-1} \sim 2^{n-1} - 1 −2n−1∼2n−1−1。
由于补码的这些优势,计算机系统中普遍采用补码来表示有符号整数,以简化运算规则并扩大表示范围。
1.3、C 语言中的整数类型及类型转换
C 语言变量之间的类型转换是统考中经常出现的题目,需要读者深入掌握这一内容。了解不同数据类型的表示范围和存储方式对于编写高效、可靠的程序至关重要。
1.3.1、C 语言中的整型数据类型
- 整型数据类型概述:
-
C 语言中,有符号整数根据位数的不同,可分为短整型(short 或 short int,16 位)、整型(int,32 位)、长整型(long 或 long int,在 32 位机器中为 32 位,在 64 位机器中为 64 位)。
-
要定义无符号整数,只需在 short/int/long 之前加上关键字 unsigned,如无符号短整型(unsigned short 或 unsigned short int)、无符号整型(unsigned int)、无符号长整型(unsigned long 或 unsigned long int)。若不指定 signed/unsigned 时,则默认认为有符号整数。
-
字符型:字符型(char,8 位)是 C 语言中的一个特殊类型,默认按无符号整数解释。
-
存储方式:上述类型都是按补码形式存储的,只是有符号整数的最高位代表符号,而无符号整数的全部二进制位都表示数值,没有符号位,相当于数的绝对值,因此两者所表示的数据范围有所不同。
-
有符号整数表示范围:
- 短整型(short 或 short int):16 位
- 整型(int):32 位
- 长整型(long 或 long int):32 位(32 位机器)或 64 位(64 位机器)
-
无符号整数类型:
- 无符号短整型(unsigned short 或 unsigned short int)
- 无符号整型(unsigned int)
- 无符号长整型(unsigned long 或 unsigned long int)
-
若不指定 signed/unsigned 时,则默认认为有符号整数。
1.3.2、有符号数和无符号数的转换
-
强制类型转换:C 语言允许在不同的数据类型间做类型转换。强制类型转换的代码格式为
(TYPE b = (TYPE)a)
,强制类型转换后,返回一个具有 TYPE 类型的数值。 -
short 型转换到 unsigned short 型:将位数相同的 short 型强制转换为 unsigned short 型,两个变量对应的每位都是相同的,即强制类型转换的结果是保持二进制各位的位值不变,仅改变解释这些位的方式。
-
示例分析:
int main() {short x = -4321;unsigned short y = (unsigned short)x;printf("x=%d, y=%u\n", x, y); }
-
有符号整数
x
是一个负数,而无符号整数y
只能表示一个正数,它们在计算机内部都占 16 位,y
的表示范围显然不包括x
的值。 -
有符号整数
x = -4321
,无符号整数y = 61215
。 -
输出的结果中,得到的
y
值似乎与原来的x
没有一点关系。不过将这两个数转换为二进制表示时,我们就会发现其中的规律,如下表所示。 -
y 与 x 的对比
变量 值 位15 位14 位13 位12 位11 位10 位9 位8 位7 位6 位5 位4 位3 位2 位1 位0 X -4321 1 1 1 0 1 1 1 1 0 0 0 1 1 1 1 1 y 61215 1 1 1 0 1 1 1 1 0 0 0 1 1 1 1 1
-
-
unsigned short 型转换到 short 型:将无符号整数转换为有符号整数时,最高位解释为符号位,也可能发生数值的变化。
- 示例分析:
int main() {unsigned short x = 65535;short y = (short)x;printf("x=%u, y=%d\n", x, y); }
- 将
x
和y
转换为二进制表示,变量x
对应的二进制表示为 16 位全 1,若按有符号数的规则解释,则 16 位全 1 对应的真值是 -1。 - 有符号整数
x = 65535
,无符号整数y = -1
。
- 示例分析:
若同时有无符号数和有符号数参与运算,则 C 语言标准规定按无符号数进行运算。
总结:
- 位数相同的有符号数转换为无符号数时,符号位解释为数值的一部分,负数转换为无符号数时数值将发生变化。
- 同理,位数相同的无符号数转换为有符号数时,最高位解释为符号位,也可能发生数值的变化。
1.3.3、不同字长整数之间的转换
-
大字长变量向小字长变量转换:
- 当大字长向小字长转换时,系统把多余的高位部分直接截断,低位部分直接赋值。
- 例如,考虑如下代码片段:
int main() {int x = 165537, u = -34991; // int 型占用 4Bshort y = (short)x, v = (short)u; // short 型占用 2Bprintf("x=%d, y=%d\n", x, y);printf("u=%d, v=%d\n", u, v); }
- 运行结果如下:
x = 165537, y = -31071 u = -34991, v = 30545
- x, y, u, v 的十六进制表示分别为
0x000286a1
,0x86a1
,0xffff7751
,0x7751
。
-
小字长变量向大字长变量转换:
- 例如,考虑如下代码片段:
int main() {short x = -4321;int y = x;unsigned short u = (unsigned short)x;unsigned int v = u;printf("x=%d, y=%d\n", x, y);printf("u=%u, v=%u\n", u, v); }
- 运行结果如下:
x = -4321, y = -4321 u = 61215, v = 61215
- x, y, u, v 的十六进制表示分别为
0xef1f
,0xffffef1f
,0xef1f
,0x0000ef1f
。 - 从小字长转换为大字长时,要对高位部分进行扩展。
- 若原数字是无符号整数,则进行零扩展,扩展后的高位部分用 0 填充(例如,当 16 位无符号整数
u
强制转换为 32 位无符号整数v
时,高 16 位用 0 填充)。 - 若原数字是有符号整数,则进行符号扩展,扩展后的高位部分用原数字符号位填充(例如,当 16 位有符号整数
x
强制转换为 32 位有符号整数y
时,因为x
的符号位是 1,所以高 16 位用 1 填充)。
- 若原数字是无符号整数,则进行零扩展,扩展后的高位部分用 0 填充(例如,当 16 位无符号整数
- 注意,
char
型为 8 位无符号整数,其在转换为int
型时高位补 0 即可。
- 例如,考虑如下代码片段:
在有符号数和无符号数的转换中,若两个变量的字长不同,则分两种情况进行讨论:
- 若从小字长转换到大字长,则要先对原数字的高位部分进行扩展,若原数字是无符号整数,则进行零扩展;若原数字是有符号整数,则进行符号扩展。
- 若从大字长转换到小字长,则直接截取低位部分。也就是说,先进行字长的转换,再进行符号的转换。
2、实数的表示
2.1、浮点数的相关概念
浮点数表示法是一种在计算机中表示实数的方法,它通过将一个数表示为尾数(mantissa)和指数(exponent)的乘积来实现。这种表示方法允许在有限的位数内表示非常大或非常小的数,同时保持一定的精度。
-
浮点数表示法的优势:
- 扩大表示范围:浮点数表示法可以在有限的位数内表示非常大或非常小的数。
- 保持有效精度:通过适当的尾数和指数表示,浮点数可以保持数的有效精度。
-
例子:
- 电子的质量:用浮点数表示为 9 × 10 − 28 g 9 \times 10^{-28}g 9×10−28g,相比于定点数表示,浮点数表示更加方便。
- 太阳的质量:用浮点数表示为 2 × 10 33 g 2 \times 10^{33}g 2×1033g,同样,浮点数表示法在这种情况下也更为方便。
-
定点数表示的局限性:
- 表示范围有限:定点数表示法在表示非常大或非常小的数时非常不方便。
- 精度受限:在有限的位数内,定点数表示法难以同时保持数的范围和精度。
2.2、浮点数的表示格式
-
浮点数通常表示为:
N = ( − 1 ) S × M × R E N = (-1)^S \times M \times R^E N=(−1)S×M×RE- S:取值 0 或 1,用来决定浮点数的符号。
- M:是一个二进制定点小数,称为尾数,一般用定点原码小数表示。
- E:是一个二进制定点整数,称为阶码或指数,用移码表示。
- R:是基数(隐含),可以约定为 2、4、16 等。
浮点数由符号、尾数和阶码三部分组成。
-
32 位短浮点数格式的例子:
- 第0位:为符号位 ( S )。
- 第1~7位:为移码表示的阶码 ( E )(偏置值为64)。
- 第8~31位:为24位二进制原码小数表示的尾数 ( M )。
- 基数:( R = 2 )。
阶码的值反映浮点数的小数点的实际位置;阶码的位数反映浮点数的表示范围;尾数的位数反映浮点数的精度。
-
浮点数的表示范围:原码是关于原点对称的,所以浮点数的范围也是关于原点对称的,如下图所示。
-
上溢和下溢的定义:
- 上溢:运算结果大于最大正数时称为正上溢,小于绝对值最大负数时称为负上溢,正上溢和负上溢统称上溢。
- 下溢:当运算结果在 0 至最小正数之间时称为正下溢,在 0 至绝对值最小负数之间时称为负下溢,正下溢和负下溢统称下溢。
-
上溢和下溢的处理:
- 数据一旦产生上溢,计算机必须中断运算操作,进行溢出处理。
- 数据下溢时,浮点数值趋于零,计算机将其当作机器零处理。
2.3、浮点数的规格化
-
规格化操作的目的:为了在浮点数运算过程中尽可能多地保留有效数字的位数,使有效数字尽量占满尾数数位,必须在运算过程中对浮点数进行规格化操作。
-
规格化操作的定义:规格化操作是指通过调整一个非规格化浮点数的尾数和阶码的大小,使非零浮点数在尾数的最高数位上保证是一个有效值。
-
左规和右规:
- 左规:当运算结果的尾数的最高数位不是有效位,即出现 ± 0.0...0 × . . . × ±0.0...0×...× ±0.0...0×...× 的形式时,需要进行左规。左规时,尾数每左移一位、阶码减1(基数为2时)。左规可能要进行多次。
- 右规:当运算结果的尾数的有效位进到小数点前面时,需要进行右规,右规只需进行一次。将尾数右移一位、阶码加1(基数为2时)。右规时,阶码增加可能导致溢出。
-
基数为2的规格化尾数M:基数为2的原码规格化尾数 M M M 应满足 1 2 ≤ ∣ M ∣ < 1 \frac{1}{2} \leq |M| < 1 21≤∣M∣<1,形式如下:
- 正数为 0.1×…× 的形式,最大值为 0.11…1,最小值为 0.100…0,表示范围为 1 2 ≤ M ≤ ( 1 − 2 − n ) \frac{1}{2} \leq M \leq (1 - 2^{-n}) 21≤M≤(1−2−n);
- 负数为 1.1×…× 的形式,最大值为 1.10…0,最小值为 1.11…1,表示范围为 − ( 1 − 2 − n ) ≤ M ≤ − 1 2 -(1 - 2^{-n}) \leq M \leq -\frac{1}{2} −(1−2−n)≤M≤−21。
-
基数不同对规格化形式的影响:基数不同,浮点数的规格化形式也不同。当浮点数尾数的基数为2时,原码规格化数的尾数最高位一定是1。当基数为4时,原码规格化数的尾数最高两位不全为0。
2.4、IEEE 754 标准
2.4.1、IEEE 754 单精度数大小的比较
IEEE 754 标准浮点数的格式如下图所示。
IEEE 754 标准规定常用的浮点数格式有 32 位单精度浮点数(短浮点数、float 型)和 64 位双精度浮点数(长浮点数、double 型),其基数隐含为2,如下表所示。
类型 | 符号 s s s | 阶码 e e e | 尾数 f f f | 总位数 | 偏置值(十六进制) | 偏置值(十进制) |
---|---|---|---|---|---|---|
单精度 | 1 | 8 | 23 | 32 | 7FH | 127 |
双精度 | 1 | 11 | 52 | 64 | 3FFH | 1023 |
- 单精度格式:包含 1 位符号 s s s、8 位阶码 e e e 和 23 位尾数 f f f。
- 双精度格式:包含 1 位符号 s s s、11 位阶码 e e e 和 52 位尾数 f f f。
基数隐含为 2:尾数用原码表示。对于规格化的二进制浮点数,尾数的最高位总是 1,为了能使尾数表示一位有效位,将这个 1 隐藏,称为隐藏位,因此 23 位尾数实际表示了 24 位有效数字。
- 例如,十进制数12转换为二进制表示为 ( 1100 ) 2 (1100)_2 (1100)2。根据IEEE 754标准,将其规格化后的结果为 1.1 × 2 3 1.1 \times 2^3 1.1×23。在这个表示中,整数部分的“1”并不存储在23位尾数内,而是作为隐藏位存在。
单精度与双精度浮点数都采用隐藏尾数最高位的方法,因此使浮点数的精度更高。
2.4.2、IEEE 754 标准中的指数表示
-
指数的偏置值:在 IEEE 754 标准中,指数用移码表示,但偏置值并不是通常 n n n 位移码所用的 2 n − 1 2^{n-1} 2n−1,而是 2 n − 1 − 1 2^{n-1} - 1 2n−1−1。因此:
- 单精度浮点数的偏置值分别为 127。
- 双精度浮点数的偏置值分别为 1023。
-
阶码的存储:在存储浮点数阶码之前,偏置值要先加到阶码真值上。例如:
- 阶码值为 3,在单精度浮点数中,移码表示的阶码为 127 + 3 = 130 ( 82 H ) 127 + 3 = 130 (82H) 127+3=130(82H);
- 在双精度浮点数中,阶码为 1023 + 3 = 1026 ( 402 H ) 1023 + 3 = 1026 (402H) 1023+3=1026(402H)。
2.4.3、规格化浮点数的真值
- 在 IEEE 754 标准中,规格化单精度浮点数的真值表示为:
( − 1 ) s × 1. f × 2 e − 127 (-1)^s \times 1.f \times 2^{e-127} (−1)s×1.f×2e−127 - 规格化双精度浮点数的真值表示为:
( − 1 ) s × 1. f × 2 e − 1023 (-1)^s \times 1.f \times 2^{e-1023} (−1)s×1.f×2e−1023 - 规格化浮点数的表示范围
- 规格化单精度浮点数的阶码 e e e 的取值范围为 1~254(8 位)。
- 规格化双精度浮点数的阶码 e e e 的取值范围为 1~2046(11 位)。
- IEEE 754 规格化浮点数的表示范围见下表。
格式 | 最小值 | 最大值 |
---|---|---|
单精度 | e = 1 e = 1 e=1, f = 0 f = 0 f=0, 1.0 × 2 1 − 127 = 2 − 126 1.0\times2^{1-127}=2^{-126} 1.0×21−127=2−126 | e = 254 e = 254 e=254, f = .111... f = .111... f=.111..., 1.111...1 × 2 254 − 127 = 2 127 × ( 2 − 2 − 23 ) 1.111...1 \times 2^{254-127} = 2^{127} \times (2 - 2^{-23}) 1.111...1×2254−127=2127×(2−2−23) |
双精度 | e = 1 e = 1 e=1, f = 0 f = 0 f=0, 1.0 × 2 1 − 1023 = 2 − 1022 1.0\times2^{1-1023}=2^{-1022} 1.0×21−1023=2−1022 | e = 2046 e = 2046 e=2046, f = .1111... f = .1111... f=.1111..., 1.111...1 × 2 2046 − 1023 = 2 1023 × ( 2 − 2 − 52 ) 1.111...1 \times 2^{2046-1023} = 2^{1023} \times (2 - 2^{-52}) 1.111...1×22046−1023=21023×(2−2−52) |
2.4.4、特殊情况
对于 IEEE 754 格式的浮点数,阶码全为 0 或全为 1 时,有其特别的解释,如下表所示。
值的类型 | 符号(单精度 32 位) | 阶码(单精度 32 位) | 尾数(单精度 32 位) | 值(单精度 32 位) | 符号(双精度 64 位) | 阶码(双精度 64 位) | 尾数(双精度 64 位) | 值(双精度 64 位) |
---|---|---|---|---|---|---|---|---|
正零 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
负零 | 1 | 0 | 0 | -0 | 1 | 0 | 0 | -0 |
正无穷大 | 0 | 255(全1) | 0 | ∞ | 0 | 2047(全1) | 0 | ∞ |
负无穷大 | 1 | 255(全1) | 0 | -∞ | 1 | 2047(全1) | 0 | -∞ |
无定义数(非数) | 0 或 1 | 255(全1) | f ≠ 0 f \neq 0 f=0 | NaN | 0 或 1 | 2047(全1) | f ≠ 0 f \neq 0 f=0 | NaN |
非规格化正数 | 0 | 0 | f ≠ 0 f \neq 0 f=0 | 2 − 126 ( 0. f ) 2^{-126}(0.f) 2−126(0.f) | 0 | 0 | f ≠ 0 f \neq 0 f=0 | 2 − 1022 ( 0. f ) 2^{-1022}(0.f) 2−1022(0.f) |
非规格化负数 | 1 | 0 | f ≠ 0 f \neq 0 f=0 | − 2 − 126 ( 0. f ) -2^{-126}(0.f) −2−126(0.f) | 1 | 0 | f ≠ 0 f \neq 0 f=0 | − 2 − 1022 ( 0. f ) -2^{-1022}(0.f) −2−1022(0.f) |
- 全 0 阶码全 0 尾数:+0/-0。零的符号取决于符号 s s s,一般情况下+0 和 -0 是等效的。
- 全 1 阶码全 0 尾数:+∞/−∞。+∞在数值上大于所有有限数,−∞则小于所有有限数。引入无穷大数的目的是,在计算过程出现异常的情况下使得程序能继续进行下去。
- 全 1 阶码非 0 尾数:NaN(Not a Number)。表示一个没有定义的数,称为非数。
- 全 0 阶码非 0 尾数:非规格化数。非规格化数的特点是阶码为全 0,尾数高位有一个或几个连续的 0,但不全为 0。因此,非规格化数的隐藏位为 0,且单精度和双精度浮点数的指数分别为−126 或−1022。非规格化数可以用于处理阶码下溢。
2.4.5、示例分析
-
将十进制数 -8.25 转换为 IEEE 754 单精度浮点数格式表示:
- 将 -8.25 转换成二进制数,即 − 1000.01 = − 1.00001 × 2 3 -1000.01 = -1.00001\times2^3 −1000.01=−1.00001×23。
- 计算阶码 E E E, E = 127 + 3 = 130 E = 127 + 3 = 130 E=127+3=130,转换成二进制数为 10000010 10000010 10000010。
- IEEE 754 单精度浮点数格式:符号(1 位)+ 阶码(8 位)+ 尾数(23 位)。
- 因此,单精度格式表示为 1 ; 10000010 ; 000010000000000000000000 1; 1000 0010; 0000 1000 0000 0000 0000 0000 1;10000010;000010000000000000000000。即:1100 0001 0000 0100 0000 0000 0000 0000 = C104 0000H
-
求 IEEE 754 单精度浮点数 C640 0000H 的值是多少?
-
先将C640 0000H 按二进制展开为 11000110010000000000000000000000 1100 0110 0100 0000 0000 0000 0000 0000 11000110010000000000000000000000。
-
对应 IEEE 754 单精度浮点数的格式如下:
- 符号 = 1 表示负数;
- 阶码值为 10001100 − 01111111 = 00001101 = 13 1000 1100 - 0111 1111 = 0000 1101 = 13 10001100−01111111=00001101=13;
- 尾数值为 1.5 1.5 1.5(注意其有隐藏位,要加 1)。
-
因此,浮点数的值为 − 1.5 × 2 13 -1.5 \times 2^{13} −1.5×213。
-
2.5、C 语言中的浮点数类型
-
不同类型数据转换后数值的变化:
- C 语言中的
float
型和double
型分别对应于 IEEE 754 单精度浮点数和双精度浮点数。 long double
型对应于扩展双精度浮点数,但其长度和格式随编译器和处理器类型的不同而有所差异。- 在 C 程序中,等式的赋值和判断会导致强制类型转换,例如
char→int→long→double
和float→double
最为常见,转换过程中没有损失。
- C 语言中的
-
类型转换原则:
- 不同类型数的混合运算时,遵循的原则是类型提升,即较低类型转换为较高类型。例如
long
型与int
型一起运算时,需先将int
型转换为long
型,然后进行运算,结果为long
型。 - 若
float
型和double
型一起运算,虽然两者同为浮点型,但精度不同,则仍需先将float
型转换为double
型后再进行运算,结果亦为double
型。 - 所有这些转换都是系统自动进行的,这种转换称为隐式类型转换。
- 不同类型数的混合运算时,遵循的原则是类型提升,即较低类型转换为较高类型。例如
-
int 型和 float 型的精度和范围的分析:
int
型转换为float
型时,虽然不会发生溢出,但float
型尾数连隐藏位共 24 位,int
型为 32 位,当int
型数转换成浮点数的尾数的有效位大于 24 位时,需舍入处理,影响精度。int
型或float
型转换为double
型时,因double
型的有效位数更多,因此能保留精确值。double
型转换为float
型时,因float
型的表示范围更小,因此大数转换时可能发生溢出。此外,尾数有效位数变少,因此高精度数转换时会发生舍入。float
型或double
型转换为int
型时,因int
型没有小数部分,因此数据会向 0 方向截断(仅保留整数部分),发生舍入。另外,因int
型的表示范围更小,因此大数转换时可能溢出。
在不同数据类型之间转换时,往往隐藏着一些不容易察觉的错误,编程时需要非常小心。
定点、浮点表示的区别:
- 数值的表示范围:若定点数和浮点数的字长相同,则浮点表示法所能表示的数值范围远大于定点表示法。
- 精度:对于字长相同的定点数和浮点数来说,浮点数虽然扩大了数的表示范围,但精度降低了。
- 数的运算:浮点数包括阶码和尾数两部分,运算时不仅要做尾数的运算,还要做阶码的运算,而且运算结果要求规格化,所以浮点运算比定点运算复杂。
- 溢出问题:在定点运算中,当运算结果超出数的表示范围时,发生溢出;在浮点运算中,运算结果超出尾数表示范围却不一定溢出,只有规格化后阶码超出所能表示的范围时,才发生溢出。
四、参考资料
鲍鱼科技课件
b站免费王道课后题讲解:
网课全程班: