【CASPP】第一部分1:信息存储

tech2026-10-07  6

信息存储

虚拟内存:非常大的字节数组。物理上并不是真实存在的,仅是展现给机器级程序的概念性。 内存地址:内存的每个字节都由唯一的数字来标识。 程序本身是一个字节序列。

十六进制表示

十进制转十六进制:

字数据大小

字长:通常说一个64位的机器,就是指这个机器的字长为64位。字长决定了虚拟地址的范围, 因为虚拟地址是以指定长度的字来编码的。一个字长为 w w w 的机器,虚拟地址范围为 0   2 w − 1 0 ~2^w-1 0 2w−1

大多数64位机器也可以运行为32位机器编译的程序,这是一种向后兼容。 (也就是说64位机器运行的不一定是“64位程序”,还要看程序的编译方式)

寻址和字节顺序

字节是最小的可寻址内存单元 多字节对象被存储为连续的字节序列,其地址为所使用字节中最小的地址 (比如,上图中变量 x 的地址为 0x100)

字符串表示

字符串 “18213” 的 ASCII 字符码,以 null (00) 字符表示结尾。 Sun 是大端法,IA32 是小端法。可以看出使用ASCII码作为字符码在任何系统上都得能得到相同的结果,与字节顺序和字大小无关。 文本数据比二进制数据具有更强的平台独立性

ASCII是单字节编码。如果是多字节会有这么好的平台独立性吗?

代码表示

二进制代码并不兼容

布尔代数

C语言中的位运算

C语言中的逻辑运算

C语言中提供逻辑运算符 ||、&&、! 分别对应命题逻辑的 OR、AND 和 NOT运算。

与位级运算的区别: 1、逻辑运算认为所有非0的参数表示真,0表示假 2、逻辑运算返回结果为 0 或1

移位运算

C/C++中的移位运算: 逻辑右移补0,算数右移补原来的最高位。对于无符号数,一定是逻辑右移;有符号数,编译器几乎使用算术右移。在Java中,>>表示算术右移,>>>表示逻辑右移。

移位运算是可结合的移动 k (k>=w) 位时,编译器实际上执行的移位指令只考虑了 k mod w 位。优先级小于加法/减法
最新回复(0)