信息存储
计算机使用字节作为最小的可寻址存储单位。程序将存储视为一个很大的字节数组,成为虚拟存储器。
存储器的每个字节都由一个唯一的十六进制数字表示,称为地址,所有可寻址的地址的集合称为虚拟地址空间。虚拟地址空间是展现给机器级程序的概念性映像。
计算机的字长(cpu位数)决定了虚拟地址空间的大小,如32位cpu的寻址范围为0~2的32次方,最大虚拟地址为4G,所以32位操作系统的最大可用内存为4G。32位cpu表示的地址总线为32根。
大端法和小端法:小端法为低地址对应低字节,大端法为低地址对应高字节。Intel处理器大多数采用小端法。
整数表示
整型数据类型表示有限范围的整数。负数的范围比正数的范围大1。
强制类型转换的结果保持位值不变,只是改变了解释这些位的方式。
整数运算
编译器使用了一项重要优化,试着用位移和加法运算的组合来代替乘以常数因子的乘法。
浮点数
1、IEEE浮点标准用V = (-1)^s * M * 2^E
s:sign,符号,决定正负。
M:significand,尾数,通常是[1.0~2.0)范围的小数
E:exponent,阶码,就是次方数。
2、IEEE标准定义了一些使之更合理的规则。例如,定义1 / -0将产生-∞,而定义1 / +0会产生+∞
3、 C语言版本提供了两种不同的浮点数据类型:float 和 double。
4、浮点数和整数之间的转化:
从int ---> float可能会发生舍入,但是不会发生溢出
从int --> double,如果Int的值是在53位以下的(包括53位),会得到一个精确的转换。
从float --> double, 我们会得到一个精确的转换因为double的精度远远大于float的精度
从float, double -- > int,这样的转化可能会有问题,一个是从单精度浮点数到Int,由于阶码的存在,要调整尾数的尾数,所以在移位操作的时候可能会丢掉一些低有效位。