最小可寻址的内存单位:字节(byte),包含8个二进制位(bit)。机器级程序将内存视为一个巨大的字节数组,内存的每个字节都有一个唯一数字标识,称为地址(address),所有地址的集合称为虚拟地址空间,展现给机器级程序。这实现了硬件到软件的第一步封装:程序无需关注虚拟内存的实现细节,而只需要通过访问地址来使用他们即可。
十六进制表示法:二进制太冗长,十进制转换太麻烦。一个字节用十六进制可表示为0016-FF16。以0x或0X开头的值被认为是十六进制,在十六进制中不区分字母大小写。
每台计算机都有字长,指明指针数据的标称大小,体现了虚拟地址的编码长度,也就限定了程序能访问字节的范围。(32位,64位机器就是这样来的,这一升级允许了程序访问大量数据)
固定的数据类型大小对程序的可移植性有着至关重要的意义。
寻址与字节顺序:对于多字节的变量,其占用的字节基本上是连续的,指向它的指针中存放的是其首字节地址,排列方式有两种:大端法与小端法,根据最高/最低有效字节在前决定。大端法是我们通常阅读的顺序。
使用sizeof()代替具体对象字节数也能提高可移植性。
字符串表示:
字符集:ASCII(128)->ASCII扩展(256,GB2312,GBK等),Unicode
编码方案:UTF-8,UTF-16等
布尔运算:与&、或|、非~、异或^,可以扩展到位向量的运算,并对应集合编码。
逻辑运算:与&&、或||、非!、逻辑运算具有短路性,有可能不会计算后一个表达式。
移位运算:在每个字节进行,左结合,左移位右端用0补齐,逻辑右移左端用0补齐,算术右移左端用原最高有效位补齐。对有符号数,右移一般为算术右移,对无符号数,必须为逻辑右移。需要注意,如果移位超过一个字节长度(8),将会mod8。移位运算优先级在加减法和逻辑运算符之间。