文章目录
- 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