机器字

  • 机器字长:指数据地址长度,分为32位和64位。
  • 机器字地址:指机器字的第一个字节的地址。

字节序

一个机器字内的各个字节的排列方式,分为大端小端

  • 大端:最低权重字节占据高地址。
  • 小端:最低权重字节占据低地址。

整数的二进制编码

无符号数

也称为原码表示

  • 取值范围:

有符号数

也称为补码表示,二进制最高位为符号位,权重为

  • 对于非负数:补码=原码
  • 对于负数:补码=绝对值的反码(原码各位取反)+1
  • ~ 补码是相反数的补码的反码+1!
  • 取值范围:
  • ! 相同位数的无符号数与有符号数混合使用时,有符号数默认转换为无符号数

无符号数与有符号数间的转换

  • ! 把负整数映射到无符号数的高数值范围

运算

无符号数加法

补码加法

逻辑右移

最高位补 相当于无符号数的

算数右移

最高位补和原本最高位相同的值。 相当于带符号数的 要实现向零取整,当 为负数时,需要添加一个偏置量 ,即计算

  • ~ 无论是逻辑右移还是算数右移,都相当于除法后向下取整

浮点数的二进制编码

  • 符号:s
  • 有效数:,控制精度
  • 指数:E,控制表示范围
  • 单精度:E8M23
  • 双精度:E11M52

规格化浮点数

满足

  • 真实的 E 需要减去一个偏置量
    • 单精度数:127
    • 双精度数:1023
  • 小数域第一位隐含为 1
    • frac 为 时 M 为 1.0 例:

非规格化浮点数

  1. 满足
    • E=1-Bias
    • M 的第一位不再隐含 1
  2. 满足
    • :表示
    • :NaN

小浮点数示例:

向偶数舍入

  • 若大于 ,进位,若小于 ,舍去
  • 若等于 ,即最低有效位右侧为 ,若最低有效位为 ,舍去,若为 ,进位

  • 舍入操作可能导致溢出,如 63 舍入后为 10.000,此时需调整为 1.000,指数位加一

类型转换

  • doublefloatint:尾数部分截断,若溢出或浮点数为 NaN,则转换结果无意义,一般置为 Tmin 或 Tmax
  • intdouble:精确转换
  • intfloat:不会溢出,但是可能舍入