续更...
学习视频:https://www.bilibili.com/video/BV1iW411d7hd?p=2
学习书本:《深入理解计算机系统》第3版。
信息存储:8位=1字节;内存所有可能地址集合称为“虚拟地址空间”;每个程序对象可以视为一个“字节快”,程序本身是一个字节序列。
进制转换:十六进制,用A~F表示,A=10、C=12、F=15。十六进制以“0X”开头。每四位二进制数对应一位十六进制数(2的四次方=16,因此二进制和十六进制很好转换)。其他进制转十进制,通过加法、乘法求最终值。十进制转十六进制,通过不停的求商,求余,直到商最后为0。
字长:常见的32位和64位字长。字长w位,虚拟地址为0~2w-1。大多数64位机器可以运行32位机器编译的程序。到底叫“32位程序”还是“64位程序”取决于编译。C语言某些数据类型的确切字节数依赖于程序如何被编译。
对象地址:多字节对象被存储为连续的字节序列,对象地址使用字节序列中的最小地址。(每个字节都有自己的地址)。
字节顺序:0x01234567,01如果放地址前面,后面按照顺序放后面的地址,则称“大端法”,反正67放最前地址,其他按顺序倒推,则称“小端法”。机器的不同,字节顺序可能不同。
布尔代数运算(位运算):&、|、^、~。满足分配律、结合律、交换律。
逻辑运算:与位级运算相似,但只返回1或0,0代表false,1代表true。当位级运算的参数只有0和1的时候,才和逻辑运算有相同的行为。
移位运算:<<——左移运算。>>——右移运算。右移分逻辑右移和算术右移。C语言中,如果移动k位,且k位比数据类型的w位要大,那就移动k mod w位。
整数数据类型:负数的取值范围不对称,负数比正数大1,例如 [signed] char 的范围 -128~127。
原码、反码、补码:原码参与减法运算导致算出来的真值不对,然后有反码,反码导致0的编码有两种,所以有补码,补码的-128没有对应的反码和原码。
补码对应有符号类型。
无符号参与减法运算很容易出bug。求差如果求出负数,bug。
`