第二张 信息的表示和处理
2.1 信息存储
计算机使用8位的快作为最小可寻址的内存单位,机器级程序将内存视为一个非常大的字节数组,称为虚拟内存。内存的每个字节都是唯一表示的数组,称为地址,所有地址的集合称为虚拟地址空间。虚拟地址空间只是一个展现给机器级程序的概念性映像。实际的实现是将动态随机访问存储器、内存、磁盘存储器、特殊硬件和操作系统软件结合起来。
C编译器把每个指针和类型信息练习起来根据指针值的类型生成不同的机器级代码来访问存储在指针所指向位置处的值。它生成的实际机器级程序并不包含关于数据类型的信息。每个程序对象可以简单的视为一个字节块,程序本身是一个字节序列。
2.1.1 十六进制表示法
2.1.2 字节数据大小
每个计算机都由一个字长,指针指针数据的标志大小。32位字长限制虚拟地址空间地址位4GB,64位为16EB,向下兼容。
2.1.3 寻址和字节顺序
几乎在所有机器上,多字节对象被存储为连续的字节序列,对象的地址为所使用字节中最小的地址。排列表示一个对象的字节有两个通用规则。小端法和大端法。
2.1.4 表示字符串
C语言中字符串以null(0值)为结尾。
2.1.5 表示代码
二进制代码很少能在不同机器和操作系统组合之间移植。
2.1.6 布尔代数简介
布尔运算|和&分别对应集合的并和交,而~对应集合的补。
2.1.7 C语言中的位级运算
^是异域.
2.1.8 C语言中的逻辑运算
C语言逻辑运算符||、&&、!,对应OR、AND、NOT。逻辑运算符&&和||与它们对应的位级运算&和|区别是,如果第一个参数求职有结果,那么逻辑运算符就不会对第二个参数求职。
2.1.9 C语言中的位移运算
C语言提供了一组位移运算,向左或者向右移动位模式。机器支持两种形式的右移:逻辑右移和算数右移。逻辑右移在左端补0,算术右移在左端补最高有效位(程序员计算器BYTE模式下)。
几乎所有的编译器/机器组合都对有符号数使用算术右移,对于无符号数,右移必须是逻辑的。
2.2 整数表示
2.2.1 整型数据类型
C语言之多多种整型数据类型表示有限范围的整数。
2.2.2 无符号数的编码
2.2.3 补码编码
常见的有符号数的计算机表示方式就是补码形式。将字的最高有效位解释为负权。
2.2.4 有符号数和无符号数之间的转换
C语言允许强制转换类型。
2.2.5 C语言中的又符号数和无符号数

浙公网安备 33010602011771号