文章目录
- 1. 信息存储
- 2. 整数的表示
 
learn from 《深入理解计算机系统》
1. 信息存储
-  大多数计算机,一字节(最小的寻址单元) byte = 8 bits 位 
-  C语言中一个指针的值(无论它指向一个整数、一个结构或是某个其他程序对象)都是某个存储块的第一个字节的虚拟地址 
-  进制转换:求余法,余数逆序 
 2n 转 16 进制:i = n%4, j = n/4, 表示成16进制就是 数字 2i 后面跟 j 个 0
  
-  字节顺序:小端法,大端法,不同的字节顺序的机器间发送信息时需要注意这个问题 
  
-  使用 ASCII码作为字符码的任何系统上都将得到相同的结果,与 字节顺序 和 字大小规则 无关。因而,文本数据 比 二进制数据 具有更强的平台独立性
-  相同的程序,编译成二进制后,在不同的平台上基本上是不相同的 
-  注意掩码在不同的机器上都有效,如 ~0xFF可以把低8位掩盖,而0xFFFFFF00只能在 32 位机器上工作
-  位移操作(算术右移:左侧补充最高位) 
  
2. 整数的表示
- 补码:最高位取 负的权重
  
  
- 强制类型转化:位模式不变,解读权重的方式变了
- C语言:一个无符号,一个有符号,操作时,会将有符号变为无符号,出现奇怪的现象
- 有符号数字 到 无符号数字 的隐式转换,会带来很多看不见的 BUG,避免使用 无符号数
- 乘法的运算代价比加法、位移等代价更高,编译器会尝试将乘法转换为位移和加减法
- -x等价于- ~x+1