CSAPP-第二章 信息的表示和处理(笔记)
信息存储
如果描述一个房子的面积,我们可以用平方米这个单位,描述一棵树的高度可以用米为单位,又或者描述一个沙袋的重量可以用千克为单位,同样计算机中的内存大小也有单位来描述。
在第一章的笔记中提到了 bit
的概念,一个二进制中的 0
或 1
就是一个 bit
,而 8
个 bit
就是一个字节( byte
)。我们如果说一个电脑的运行内存为 4GB
,那么这个 1GB
就是 1024MB
,而 1MB
就是 1024KB
,1KB
是 1024B
此时的 B
也就是 byte
,所以现在我说 4GB
,你可能大概就知道这有多少个 0
或 1
了(至少这多到你无法想象)
现在大多数计算机(也就是 64
位机器)都使用 8
字节作为最小的可寻址的内存单位,而不是使用内存中单独的位(也就是 bit
)。机器级程序将内存视为一个非常大的字节数组,称为虚拟内存(之后提到的内存,通常默认指虚拟内存,这个虚拟地址是展示给程序的概念性映像,虚拟也为假象,这个手段是由硬件和操作系统来实现的)。内存中的每个字节都有自己的地址也就是唯一数字标识,
十六进制表示法
如果人直接去对着二进制数据进行分析,会感到阅读困难且冗长,如果使用十进制的话虽然方便了人类阅读但是与位模式的互相转换又会很麻烦,因此就诞生了十六进制表示法。0 ~ 9
和 A ~ F
表示了 16
个可能的值。一个字节的值域为 0 ~ 255
,用十六进制则表示为 0x00 ~ 0xFF
,以 0x
或 0X
开头的数字被认为是十六进制。字符 A ~ F
的大小写无所谓,即便是 0xfA1Bd
这样的大小写混合。
十六进制和二进制直接可以很快的进行转换,比如 0x173A4C
十六进制 | 1 | 7 | 3 | A | 4 | C |
---|---|---|---|---|---|---|
二进制 | 0001 | 0111 | 0011 | 1010 | 0100 | 1100 |
你可以发现十六进制转为二进制,你只需要看每一个数字将其转换为对应二进制,最后拼凑起来即可,所以它的二进制表示为 000101110011101001001100
二进制转换十六进制也是这个方法,不过当位总数不是 4
的倍数时,需要在最左侧补 0
,最后将每个 4
位组转换为对应的十六进制数字
逻辑运算
位级运算
移位运算
字节顺序
大端序,小端序
补码
存储 运算与访问