字节作为最小的可寻址的单位,而不是位bit。机器级程序将存储器看做一个非常大的数组,成为虚拟存储器。存储器的每个字节都由一个唯一的数字来标识,称为它的地址,所有可能的地址的集合就叫虚拟地址空间virtual address space。虚拟地址的主要目的就是展现给程序一个概念性的映像,将访问内存,磁盘,特殊硬件结合起来,为程序提供一个看上去统一的字节数组。
C编译器还把每个指针和类型信息联系起来,这样就可以根据指针的类型,生成不同的及其级代码来存储指针所指向的数据。尽管C编译器维护者这个类型信息,但是它生成的机器级程序并不在乎数据类型的信息。每个程序对象都可以简单视为一个字节块。
与变量相似,指针也具有两个方面:值和类型。指针的值表示某个对象的地址,指针的类型表示那个位置上所存储的对象的类型。
寻址和字节顺序:对于一些占用多字节的对象,我们必须建立两个规则:这个对象的地址是什么,以及在存储器中如何排列这些字节。其实在几乎所有的机器上,多字节的对象都被存储为连续的字节序列,然后对象使用所有字节中最小的地址当做本对象的地址~。
小端法:机器按照存储器中从最低有效字节到最高有效字节的顺序去存储对象。
大端法:机器按照存储器中从最高有效字节到最低有效字节的顺序去存储对象。
直观来看,可能大端法更符合人类的习惯。
有符号数和无符号数一起进行运算的时候,会对有符号数进行隐形强制转换为无符号数。比如(-1<0U)就是错的。