虚拟内存:非常大的字节数组。物理上并不是真实存在的,仅是展现给机器级程序的概念性。 内存地址:内存的每个字节都由唯一的数字来标识。 程序本身是一个字节序列。
十进制转十六进制:
字长:通常说一个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语言中提供逻辑运算符 ||、&&、! 分别对应命题逻辑的 OR、AND 和 NOT运算。
与位级运算的区别: 1、逻辑运算认为所有非0的参数表示真,0表示假 2、逻辑运算返回结果为 0 或1
C/C++中的移位运算: 逻辑右移补0,算数右移补原来的最高位。对于无符号数,一定是逻辑右移;有符号数,编译器几乎使用算术右移。在Java中,>>表示算术右移,>>>表示逻辑右移。
移位运算是可结合的移动 k (k>=w) 位时,编译器实际上执行的移位指令只考虑了 k mod w 位。优先级小于加法/减法