2.1 信息存储

2.1.1 十六进制表示法

  • 二进制 (i+4j,{i∈[0,3],j个0})<——>(4位一拆) 十六进制 (除16)<——>(乘16) 十进制

2.1.2 字数据大小

  • 计算机字长w位(word size):指明指针数据的标称大小(nominal size), 决定虚拟地址空间大小0~$2^{w}-1$

2.1.3 寻址和字节顺序

  • 多字节对象都被存储为连续的字节序列
  • 小端法:最低有效字节在前面
  • 大端法:最高有效字节在前面
  • 字节顺序产生问题
    1. 不同机器通过网络传送二进制数据
    2. 阅读表示整数数据的字节序列
    3. 编写规避正常的类型系统的程序

2.1.7 C语言中的位级运算

  • 掩码运算:从一个字中选出的位的集合。x&0xFF(可移植)

2.1.8 C语言中的逻辑运算

  • 逻辑运算(&&||!) vs 位级运算(&|~^):非零 - true,0 - false;短路

2.1.9 C语言中的移位运算

算术右移(补最高位)
逻辑右移(补0)

2.2 整数表示

2.2.4 有符号数和无符号数之间的转换

$0≤x≤TMax_w$ $T2U_w(x)=x$ $U2T_w(x)=x$
else $T2U_w(x)=x+2^w$ $U2T_w(x)=x-2^w$

2.2.6 扩展一个数字的位表示

无符号数的零扩展
补码数的符号扩展

2.2.7 截断数字

U2T(B2U % $2^k$)

2.3 整数运算

w位截断,s=x+y

2.3.1 无符号加法

$x+{^u_w}y= \begin{cases} x+y, & x+y<2^w & 正常 \ x+y-2^w, & 2^w≤x+y<2^{w+1} & 溢出 \end{cases}$

  • 溢出:s<x or s<y
  • 求反:$-{^u_w}x= \begin{cases} x, & x=0 \ 2^w-x, & x>0 \end{cases}$

2.3.2 补码加法

$x+{^t_w}y= \begin{cases} x+y-2^w, & 2^{w-1}≤x+y & 正溢出 \ x+y, & -2^{w-1}≤x+y<2^{w-1} & 正常 \ x+y+2^w, & x+y<-2^{w-1} & 负溢出 \end{cases}$

  • 溢出:x>0,y>0 s≤0 or x<0,y<0 s≥0

2.3.3 补码的非

$-{^t_w}x= \begin{cases} TMin_w, & x=TMin_w \ -x, & x>TMin_w \end{cases}$

  • 位级表示
    • 对每一位求补,再对结果加1
    • 对位k左边的所有位取反(k为最右边1的位置)

2.3.4 无符号乘法

$x*{^u_w}y=(x·y)mod 2^w$

2.3.5 补码乘法

$x*{^t_w}y=U2T_w((x·y)mod 2^w)$

2.3.6 乘以常数

$x*{^u_w}2^k,x*{^t_w}2^k$:x<<k

2.3.7 除以2的幂

无符号,补码(向下舍入):x>>k
补码(向上舍入):(x+(1<<k)-1)>>k

2.4 浮点数

2.4.1 二进制小数

  • 二进制转小数:$b=\sum_{i=-n}^{m}2^i\times b_i$
  • 小数($\frac{x}{2^k}$)转二进制:使用x的二进制表示,小数点插入右边k

2.4.2 IEEE浮点表示

$V=(-1)^s\times M\times 2^E$

  • s(符号sign):1负0正
  • M(尾数,n位,frac):二进制小数,1~2-ε or 0~1-ε
  • E(阶码exponent,k位,exp):权重$2^E$
  • 32位:s=1、k=8、n=23
  • 64位:s=1、k=11、n=52

情况1:规格化的值

exp≠0&≠255(双精度2047)

  • Bias(偏置biased):$2^{k-1}-1$(单精度-126~127,双精度-1022~1023)
  • e(无符号数):$e_{k-1}···e_1e_0$
  • f(frac小数值):0≤f<1,$0.f_{n-1}···f_1f_0$
  • E=e-Bias
  • M=1+f

情况2:非规格化的值

exp=0

  • E=1-Bias
  • M=f
  • 表示0

情况3:特殊值

exp=1:f=0(无穷),f≠0(NaN)

整数值转浮点形式

  1. 将二进制小数左移
  2. 丢弃开头的1,得到小数部分f
  3. e=E+Bias

2.4.4 舍入

  • 向偶数舍入
  • 向零舍入
  • 向下舍入
  • 向上舍入

2.4.5 浮点运算

  • 不具有结合性、分配性