> 文档中心 > 深入理解计算机系统(csapp) 第二章信息的表示和处理

深入理解计算机系统(csapp) 第二章信息的表示和处理


第一部分 程序结构和执行

gitee仓库

练习题答案

这一部分等全写完再补上

第一章 信息的表示和处理

2.1信息的存储

机器级程序将存储器视为一个非常大的字节数组,成为虚拟存储器。
每个字节都有唯一的数字标识,称为地址。

2.1.1 十六进制表示法

在这里插入图片描述

2.1.2 字

字长决定虚拟地址空间的大小,大小为0- 2n−1 2^{n-1} 2n1 n是代表位数,我们常说的32位操作系统64位操作系统的内存最大就是 2n−1 2^{n-1} 2n1,也就是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中明确规定了>>为算数右移,>>>为逻辑右移。