csapp note

chatpter 2 信息的表示和处理

字节顺序:

从最高有效位到最低有效位, 顺序存储的方式的就是大端法, 反之就是小端法
三种情况下需要关注字节顺序:

  1. 不同类型的机器之间通过网络传输二进制数据的时候
  2. 阅读机器码的整数的时候
  3. 编写规避正常类型系统的程序的时候

位运算

用于掩码

  1. 提取最低8位: 0xff & x
  2. 全1的掩码~0
  3. 逻辑右移是在最高位填充0, 算数右移是在最高位填充符号位
  4. 提取x存在奇数位上是1, 可以用mask = 0xaaaaaaaa, mask & x, 因为0xa = 0x0101, 恰好1在技术位上
  5. 通过不断折叠x来进行奇偶校验
1
2
3
4
5
x ^= x >> 16;
x ^= x >> 8;
x ^= x >> 4;
x ^= x >> 2;
x ^= x >> 1;

通过xor的性质, 1^1=0, 1^1^1 = 1不断折叠x, 将1不断集中异或
6. 填充最高位以下的位可以使用最高位来依次填充:

1
2
3
4
5
6
7
x |= x >> 1;
x |= x >> 2;
x |= x >> 4;
x |= x >> 8;
x |= x >> 16;

return x & ~(x << 1); // 提取最高位

7.