深入理解计算机系统(csapp) 第二章信息的表示和处理
第一部分 程序结构和执行
gitee仓库
练习题答案
这一部分等全写完再补上
第一章 信息的表示和处理
2.1信息的存储
机器级程序将存储器视为一个非常大的字节数组,成为虚拟存储器。
每个字节都有唯一的数字标识,称为地址。
2.1.1 十六进制表示法
2.1.2 字
字长决定虚拟地址空间的大小,大小为0- 2n−1 2^{n-1} 2n−1 n是代表位数,我们常说的32位操作系统64位操作系统的内存最大就是 2n−1 2^{n-1} 2n−1,也就是4GB和8GB。
2.1.3 数据大小
2.1.4 寻址和字节顺序
两种方法,大端法、小端法
最低有效字节在最前面叫小端法,最高有效字节在前面较大端法
2.1.5表示字符串
每一个char字符都有一个对应的ASCLL值,以0x00结尾
2.1.6 表示代码
程序只是字节序列,机器没有关于源程序的任何信息
2.1.7 布尔代数简介
涉及到了| & ^ ~ 四种符号
|是对两数字每一相同位存在1则为1,否则为0
&对两数字每一相同位上都为以1则为1,否则为0
^ 同0异1
~ 所有位都取反
2.1.8 C语言位级运算
C语言的位运算可以运用到任何整形数据类型中。
2.1.9 C语言逻辑运算
C语言中有|| 、&& 、!,这些逻辑运算符。
进行运算时只有0是false,其他都为true;
2.1.10 C语言中移位运算
右移分为算数右移和逻辑右移,算数右移最左侧为1的时候需要在最左侧补上一个1,这与补码的表示有关,而unsigned进行算数右移时会出现bug,只能进行逻辑右移,而 c语言没有对算数右移和逻辑右移做出明确规定,所以存在潜在bug。
此小节理解起来需要补码的知识,暂时理解不了也没关系。
java中明确规定了>>为算数右移,>>>为逻辑右移。