acautomaton
acautomaton
发布于 2024-09-05 / 21 阅读
0
0

Chapter 2. 数据的表示和运算

Chapter 2. 数据的表示和运算

公式与性质

  • 十进制数转换为任意进制数:(整数部分)除基取余,先余为低,后余为高;(小数部分)乘基取整,先整为高,后整为低。(都是从小数点向左/向右写)

  • 不是每个十进制小数都能用准确地用二进制表示,但任意一个二进制小数都能用十进制小数表示。

  • 补码整数表示整数,原码小数表示浮点数的尾数部分,移码表示浮点数的阶数部分。

  • 正数补码 = 原码 = 反码,负数补码 = 原码数值位取反 +1(最右边的 1 及其右侧不变,左侧全部取反);补码转回原码操作完全相同。

  • 移码 = 补码将符号位取反。

  • 原码 0 有两种(正零和负零),补码和移码 0 只有一种。

  • 对于负数补码、反码,数值位部分越小,该数越小。

  • 无符号整数进行零扩展,有符号整数进行符号扩展。

  • Overflow Flag, OF 溢出标志:带符号数是否溢出。 OF=C_n \oplus C_{n-1} (最高位进位 \oplus 次高位进位)。

  • Carry Flag, CF 进/借位标志:无符号数是否溢出。 CF=C_{out} \oplus C_{in} (最高位进位 \oplus 低位进位)。

  • Sign Flag, SF 符号标志:和的符号。

  • Zero Flag, ZF 零标志:结果为零时 ZF=1

  • ALU 的核心是带符号加法器。

  • 控制信号(来自控制器) m \ bit ,如果 ALU 支持 k 种控制,则 m \ge \lceil \log _2 k \rceil

  • 计算机字长由 ALU 运算位数决定。

  • 在字长为 32 位的计算机中,int的乘积若高 32 位的每一位都相同且等于低 32 位的符号,则不溢出,否则溢出。对于 unsigned int,若高 32 位全为 0 ,则不溢出,否则溢出。

  • IEEE 754

    • 在阶码(移码表示)不为 0 时,尾数(原码表示)隐含表示最高位 1 ;阶码为 0 时尾数隐含表示最高位 0
    • 浮点数的格式
      类型符号 s阶码 e尾数 f总位数偏置值
      单精度18 \ (1 \sim 254)2332127
      双精度111 \ (1 \sim 2046)52641023
    • 阶码 - 偏置值 = 指数
    • 阶码全 0 ,尾数全 0 ,表示 \pm 0 ,此时尾数隐含 0 而不是 1
    • 阶码全 1 ,尾数全 0 ,表示 \pm \infty
    • 阶码全 0 ,尾数非 0 ,表示 NaN
    • 阶码全 1 ,尾数非 0 ,表示非规格化数。
  • 浮点数的加减运算

    1. 对阶
      • 小阶码向大阶码看齐
    2. 尾数加减
    3. 尾数规格化
      1. 1x.x...x 时右规
      2. 0.0...01x...x 时左规
    4. 舍入
  • 数据的大小端存储

    • 大端:先存储高位字节,再存储低位字节。顺序与原序列相同。
    • 小端:先存储低位字节,再存储高位字节。顺序与原序列相反。
  • 对齐存储指的是按机器字长对齐。

概念

  • n 位定点数的表示范围

    表示方式定点整数定点小数
    原码-(2^{n-1}-1)\sim (2^{n-1}-1)-(1-2^{-(n-1)})\sim(1-2^{-(n-1)})
    反码-(2^{n-1}-1)\sim (2^{n-1}-1)-(1-2^{-(n-1)})\sim(1-2^{-(n-1)})
    补码-2^{n-1}\sim(2^{n-1}-1)-1\sim (1-2^{-(n-1)})
    移码-2^{n-1}\sim(2^{n-1}-1)-1\sim (1-2^{-(n-1)})

    原码和反码表示范围相同,补码和移码表示范围相同。

  • 阵列乘法器输入并行,每个位同时计算,可认为是全并行运算的乘法器

  • 浮点运算器可用两个松散连接的定点运算器部件——阶码部件和尾数部件来实现。

    阶码和尾数可以分别处理。

  • 对于 IEEE 浮点数,如果减少 1 位指数位,将其用于小数部分,能表示的最大实数变小,最小的实数变大,但数值的精度更高,能表示的实数数量可能发生变化

考点

  • 8 位补码有符号定点整数表示的最小数的二进制形式是 1000 0000

    最小数不能用常理计算,记忆即可。

  • 已知 x<0 且为小数,其编码为 n 位,则满足 [x]_补 = [x]_原 的真值 x-2^{-1}

  • 执行 unsigned short usi = 65535; short si = usi; 后,si 的值是 -1

    65535 的无符号二进制为 1111 1111 1111 1111 ,视为有符号后,其原码为 1000 0000 0000 0001

  • 双符号位补码,若运算结果符号位为 01,则为正溢出;若为 10,则为负溢出。

  • IEEE 75432 位浮点数的最大规格化正数为 [1+(1-2^{-23})]\times 2^{127}=2^{128}-2^{104} ,最小规格化负数为 -[(1+(1-2^{-23})]\times 2^{127}=-(2^{128}-2^{104})64 位同理。

    IEEE 754 32位浮点数表示范围为 (-1)^S\times1.m\times2^{E-127} ,其中 S 为符号位,m 为尾数,E 为阶码。当数最大时,m= 111 1111 1111 1111 1111 1111E=254 ,最小时取负数即可。

  • 设浮点数的阶码和尾数均采用补码表示,且位数分别为 57均含 2 位符号位),若有两个数 X=2^7 \times \frac {29} {32}, Y=2^5\times\frac 5 8 ,则用浮点加法计算 X+Y 的最终结果是发生溢出

    X:              00|111|00|11101
    Y:              00|101|00|10100
    Y 向上对阶为 Y': 00|111|00|00101
    X + Y':         00|111|01|00010   (尾数正溢出)
    对尾数右规:      01|000|00|10001   (阶数正溢出)
    
  • 尾数舍入的过程包含右规。

  • 两规格化浮点数相加,最后对结果规格化时,右规的右移位数最多为 1 位,左规的左移位数最多为 尾数位数-1 位。

  • 若浮点数用补码表示,则数符与尾数小数点后第一位数字相异为规格化数

  • 函数和初始化的全局变量(包括显式初始化为 0 )是强符号,未初始化的全局变量是弱符号。同名的强符号只能有一个。允许一个强符号和多个弱符号,但链接器会选择强符号。当有多个弱符号相同时,链接器选择最先出现的。

  • f=1.5678\times 10^3 (IEEE 754 float)d=1.5\times10^{100} (IEEE 754 double),则 (d+f)-d==f 为假

    对阶时尾数会丢失。


评论