学习笔记
1. 浮点数表示
- 浮点数结构:
- 符号位(1 位):表示数值的正负。
- 阶码(8 位):表示指数部分,使用偏移量(bias)进行编码,多为 127。
- 尾数(23 位):表示有效数字部分,隐含前导 1。
- 小数点位置:
- 通过尾数和阶码共同决定。尾数部分隐含一个
1,小数点在这个数字之后,阶码调整小数点位置。
- 通过尾数和阶码共同决定。尾数部分隐含一个
- IEEE 754 标准:浮点数遵循该标准以表示真实世界中的数值,提供有效的数值范围。
2. 移码表示
- 定义:移码是通过对数值加上一个固定的偏移量(bias),使得浮点数或有符号整数的表示能够规范化,也便于比较。
- 转换:
- 正数的移码值:实际值 + 偏移量。
- 负数的移码值:实际值 + 偏移量。
- 特点:允许负数和正数直接进行比较,无需关注符号。
3. 补码和反码
-
原码:最基本的表示方式,符号位 + 数值。
-
反码:负数由原码的符号位不变,其余位取反。
-
补码:在反码的基础上加 1。补码是计算机中使用的主要数值表示形式。
4. 运算后的符号判断
-
加法结果判断
- 使用符号位判断结果是正数还是负数。
-
溢出
- 两个同符号数相加,若结果符号位变化则发生溢出。
5. 符号位的影响
- 进位与符号位:当进行补码的运算的时候,进位不会影响最终结果的符号位,符号位决定结果是否为正数或负数,而符号位之后的不考虑。
7. 整数溢出
-
整数溢出:由于补码表示的特性,当超出表示范围时,会出现负数等错误结果,例如,当进行超过这个int类型的运算时,溢出就会发生。比如说,如果你尝试将
2,147,483,647二进制中表示为:
01111111 11111111 11111111 11111111加上 1, 正常情况下应为2,147,483,648,但在 int 补码表示中,这是无法表示的。因为溢出,结果会变成:10000000 00000000 00000000 00000000,这对应于 -2,147,483,648。这就是我们常说的爆int。