- 大多数计算机使用8位的字节作为最小的可寻址的内存单位,每个程序对象可以简单地视为一个字节块,程序本身就是一个字节序列。
- 对于一个字长为x位的机器而言,虚拟地址范围为0~2x-1,程序最多访问 2x个字节。
- 在几乎所有的机器上,多字节对象被存储为连续的字节序列,对象的地址为所使用字节中的最小地址。
- 排列表示一个对象的字节有两个通用规则:大端法和小端法,大多数Intel兼容机都只采用小端模式。
- C语言中字符串被编译为一个以null(其值为0)字符结尾的字符数组。每个字符都由某个标准编码来表示,最常见的是ASCII码。也就是将字符转换为其对应的ASCII码值存储在计算机中。
- 无符号数编码的定义:
- 有符号数最常见的计算机表示方式就是补码,补码编码的定义:
- 有符号数和无符号数之间的转换:
- 补码转换为无符号数:
- 无符号数转换为补码:
- C语言中当执行一个运算时,如果它的一个运算数是有符号的而另一个运算数是无符号的,那么C语言会隐式地将有符号参数强制类型转换为无符号参数,并假设这两个数都是非负的,来执行这个运算。例如:
int i=-1;
unsigned u=1;
if(i>u) cout<<"Hello!";
- 符号扩展:
无符号数的扩展:将无符号数扩展为一个位数更多的数据类型时,在最高位加。
补码数(有符号数)的符号扩展:负数补码最高位加1,正数补码最高位加0。 - 截断无符号数:将x截断为k位的结果:x mod 2k。
截断补码数值:同上,只是将最高位转换为符号位。 - 检测补码加法中的溢出:
- 浮点数运算、IEEE754标准、舍入。