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站免费王道课后题讲解:
网课全程班:
26王道考研书
相关文章:

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、浮…...
用 Lazarus IDE 写一个邮件客户端软件,能收发邮件,编写邮件
下面是一个使用Lazarus IDE开发的基本邮件客户端实现方案,包含收发邮件和编写邮件的核心功能。我们将使用Synapse库(跨平台的网络通信库)来处理邮件协议。 步骤1:安装依赖 安装Synapse库: 下载地址:https:…...

关于智能体API参考接口
关于智能体在Flask的源码:请求体(在payload里的是请求体)、请求头(在headers里的i局势请求头)。 我的例子: 我的疑问:为什么没按Coze官方API文档格式,在Apifox里发POST请求却能收到回复? 1. 你…...
命令行运行python程序报错 ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6
命令行运行python程序报错 ImportError: /lib/x86_64-linux-gnu/libstdc.so.6 ImportError: /lib/x86_64-linux-gnu/libstdc.so.6: version GLIBCXX_3.4.29’ not found (required by /home/zitong/miniconda3/envs/torch112/lib/python3.9/site-packages/scipy/spatial/_ckdt…...

直角坐标系和斜角坐标系
前情概要 笛卡尔坐标系是直角坐标系和斜角坐标系的统称。为什么会有这两种坐标系呢,教材中为什么最后只用直角坐标系呢?我们这样解释: 研究一维空间中的向量时,由于一维空间中的向量有无数条,如果我们选定一条作为基…...

vmware 设置 dns
vmware 设置 dns 常用的 DNS(Domain Name System)服务器地址可以帮助你更快、更安全地解析域名。以下是一些国内外常用的公共 DNS 服务: 国内常用 DNS 阿里云 DNS IPv4: 223.5.5.5、223.6.6.6IPv6: 2400:3200::1、2400:3200:baba::1特点&am…...

基于单片机的病房呼叫系统(源码+仿真)
该系统由以 STM32F4 为平台的监控终端以及以 CC2530 为平台的无线传感网组成。系统上电后自动完成 ZigBee 网络的组建、终端节点的加入,病人可利用便携式的病人终端发出呼叫求助请求信息、节点在线信息以及对护士的服务评价信息等,这些信息通过路由节点发…...
React从基础入门到高级实战:React 实战项目 - 项目四:企业级仪表盘
React 实战项目:企业级仪表盘 欢迎来到 React 开发教程专栏 的第 29 篇!在前 28 篇文章中,我们从 React 的基础概念逐步深入到高级技巧,涵盖了组件设计、状态管理、路由配置、性能优化和实时通信等核心内容。这一次,我…...

基于微信小程序的睡眠宝系统源码数据库文档
摘 要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,睡眠宝系统被用户普遍使用,为方便用户能够可以…...

VibePlayer
源代码地址: VibePlayer: VibePlayer是一款功能强大的Android音乐播放器应用,专为音乐爱好者设计,提供了丰富的音乐播放和管理功能。 用户需求 VibePlayer是一款功能强大的Android音乐播放器应用,专为音乐爱好者设计࿰…...

【汇编逆向系列】三、函数调用包含单个参数之float类型-xmm0寄存器,sub,rep,stos,movss,mulss,addss指令
一、汇编代码 single_float_param:0000000000000060: F3 0F 11 44 24 08 movss dword ptr [rsp8],xmm00000000000000066: 57 push rdi0000000000000067: 48 83 EC 10 sub rsp,10h000000000000006B: 48 8B FC mov …...
JAVA开发工具——IntelliJ IDEA
JAVA开发工具——IntelliJ IDEA 软件下载地址https://www.jetbrains.com/idea/ IDEA项目结构介绍 项目(project)模块(module)包(package)类(class) 包含关系:项目 > 模块 >…...

基于fpga的疲劳驾驶检测
基于fpga的疲劳驾驶检测 前言一、系统硬件设计二、系统软件设计系统上板实验测试 前言 代码基于网络大佬代码进行修改的。限制性比较大,不太灵活,当个本科毕业设计还是够的。 基于FPGA的疲劳检测模块硬件设计以FPGA核心控制模块为中心,通过…...

感谢阿里云RDS产品及时的“光速服务”
❝ 开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,可以解决你的问题。加群请联系 liuaustin3 ,(共3000人左右…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(十一)
下载buildroot https://buildroot.org/download.html下载交叉工具链 使用ST官方交叉工具链的话,在buildroot配置外部工具会有问题,所以直接使用正点原子的交叉编译工具 buildroot构建根文件系统 - 参考正点原子 配置 buildroot tar -vxf buildroot-20…...
18-Oracle 23ai JSON二元性颠覆传统
在当今百花齐放的多模型数据库时代,开发人员常在关系型与文档型数据库间艰难取舍。Oracle Database 23ai推出的JSON关系二元性(JSON Relational Duality) 和二元性视图(Duality Views) 创新性地统一了两者优势…...

Linux68 FTP 测试 上传下载
6.在vi编辑器里,哪个命令能将光标移到第200行?( B ) 7.A、200g B、:200 C、g200 D、G200 假如您需要找出 /etc/my.conf 文件属于哪个包 (package) ,您可以执行( D )C A、 rpm -q /etc/my.co…...

山东大学《数据可视化》期末复习宝典
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏:🏀山东大学期末速通专用_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1…...

【Elasticsearch】映射:Join 类型、Flattened 类型、多表关联设计
映射:Join 类型、Flattened 类型、多表关联设计 1.Join 类型1.1 主要应用场景1.1.1 一对多关系建模1.1.2 多层级关系建模1.1.3 需要独立更新子文档的场景1.1.4 文档分离但需要关联查询 1.2 使用注意事项1.3 与 Nested 类型的区别 2.Flattened 类型2.1 实际运用场景和…...

SpringBoot十二、SpringBoot系列web篇之过滤器Filte详解
一、前言 JavaWeb三大组件Servlet、Filter、Listener,其中之一便是过滤器Filter。 其实,Filter我们平常用的不多,一般多为项目初期搭建web架构的时候使用,后面用的就少了,在日常业务开发中不太可能碰到需要手写Filte…...

【RTSP从零实践】1、根据RTSP协议实现一个RTSP服务
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...

行为设计模式之Iterator(迭代器)
行为设计模式之Iterator(迭代器) 摘要: 迭代器模式(Iterator)是一种行为设计模式,它提供顺序访问聚合对象元素的方法,同时不暴露内部结构。该模式由迭代器接口(Iterator)、具体迭代器(ConcreteIterator)、聚合接口(Ag…...

FPGA点亮ILI9488驱动的SPI+RGB接口LCD显示屏(一)
FPGA点亮ILI9488驱动的SPIRGB接口LCD显示屏 ILI9488 RGB接口初始化 目录 前言 一、ILI9488简介 二、3线SPI接口简介 三、配置寄存器介绍 四、手册和初始化verilog FPGA代码 总结 前言 ILI9488是一款广泛应用于嵌入式系统和电子设备的彩色TFT LCD显示控制器芯片。本文将介…...
6板块公共数据典型应用场景【政务服务|公共安全|公共卫生|环境保护|金融风控|教育科研]
1. 政务服务 1.1 城市规划与管理 公共数据在城市规划与管理中可发挥关键作用。通过汇聚自然资源、建筑物、人口分布等基础数据,构建数字孪生城市模型,辅助城市总体规划编制、决策仿真模拟。在城市基础设施建设、安全运营、应急管理等方面,公共数据也是不可或缺的基础支撑。例…...

如何实现本地mqtt服务器和云端服务器同步?
有时候,一个物联网项目,A客户想要本地使用,B客户想要线上使用,C客户想要本地部署,当有网环境时能线上使用。这个时候就需要本地MQTT服务和线上MQTT服务能相互自动转发。 后来经我一翻研究,其实Activemq支持…...

windows10下搭建nfs服务器
windows10下搭建nfs服务器 有参考这篇博客 Windows10搭建NFS服务 - fuzidage - 博客园 下载 NFS Server这个app 通过网盘分享的文件:nfs1268 (1).exe 链接: https://pan.baidu.com/s/1rE4h710Uh-13kWGXvjkZzw 提取码: mwa4 --来自百度网盘超级会员v5的分享 下载后…...
CSS中justify-content: space-between首尾贴边中间等距(两端元素紧贴左右边缘,中间元素等距均匀分布)
justify-content: space-between; 是 CSS Flexbox 布局中的一个属性值,主要作用是在弹性容器的主轴方向上均匀分布子元素,具有以下核心特性: 作用效果: 首尾贴边 第一个子元素紧贴容器起始端 最后一个子元素紧贴容器结束端 中…...
【知识扫盲】分布式系统架构或分布式服务中的管理面,数据面和业务面
🧩 一、三大“面”的定义与职责(以大模型推理平台为例) 层级英文名职责关键组件举例数据面Data Plane处理用户请求、模型推理、输入输出数据转换等核心任务模型服务引擎、Tokenizer/Detokenizer、推理加速器(TensorRT、ONNX Runt…...

华为云Flexus+DeepSeek征文|Dify - LLM 云服务单机部署大语言模型攻略指南
前言:在当今人工智能快速发展的时代,华为云推出的 Dify - LLM 对话式 AI 开发平台为企业和开发者提供了便捷的大语言模型应用开发解决方案。 通过在华为云 Flexus 云服务器上单机部署 Dify,并成功集成 DeepSeek 模型,我们能够快速…...
Python爬虫:trafilatura 的详细使用(快速提取正文和评论以及结构,转换为 TXT、CSV 和 XML)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、trafilatura 概述1.1 trafilatura介绍1.2 亮点特色1.3 安装二、基本使用2.1 从URL直接提取内容2.2 输出格式控制2.3 从HTML字符串提取2.4 使用命令行工具三、高级功能3.1 全局设置3.2 提取参数定制3.3 多线程批量处…...