计算机的字长决定了虚拟地址空间的最大大小,对于一个字长为n位的机器而言,虚拟地址的范围则为0~-1,程序最多可访问个字节(每个字节对应一个地址)
为了避免由于依赖“典型”大小和不用编译器设置带来的差错,增强程序的可移植性,ISO C99引入了一类数据大小固定的数据类型,例如int32_t和int64_t
数据在内存的存储方式
大端方式:高位存储在低地址,低位存储在高地址
小端方式:低位存储在低地址,高位存储在高地址
文本数据在使用ASCII码的任何系统得到的结果都相同,与字节顺序和大小规则无关,因此具有更强的平台独立性
位向量
可以很好地用于表示有限集合,主要用于集合编码,位向量[]
例:位向量 a = [01101001] 可以表示集合 A = {0,3,5,6} 即第几位为1则表示哪个数字是有效(存在)的
移位运算
左移 —— 01100011 <<4 00110000
逻辑右移 10010101 >>4 00001001
算术右移 10010101 >>4 11111001
整数表示
1、无符号整数
unsigned 整数的和
如果两个数均用位二进制表示
当时,其和为
当时,其和则为
实际在程序中判定时,可通过x+y <x 或 x+y <y判定结果已经溢出
unsigned 整数的求反
对于无符号整数,其求反得
2、补码编码
B2T(Binary to Two's-complement),最高位为符号位
反码(One's Complement)、原码(Sign-Magitude)
补码加法中的溢出
正溢出:两个负数相加得到一个正数
负溢出:两个正数相加得到一个负数
数字的位扩展与截断
小数的二进制表示
1010.110 ——
IEEE浮点表示
S 决定数据是正数还是负数,单独的s符号位直接编码
M 尾数M是一个二进制小数,用n位小数字段frac编码
E 阶码的作用是对浮点数加权,权重是2的E次幂,用阶码字段exp编码
float,即单精度浮点格式中,s占1位、exp占8位,frac占23位
double,即双精度浮点格式中,s占1位,exp占11位,frac占52位
根据exp的值,编码后的值可分为三种不同情况
1、规格化的
exp的位模式不为全0也不为全1,此时阶码的值 = e - Bias,e是无符号数,Bias是等于的偏置值;frac描述小数值f;而尾数定义为1+f
2、非规格化的值
exp的位模式全为0,此时阶码值 = 1 - Bias,尾数的值为M = f
3、特殊值
exp的位模式全为1,小数域全0时表示无穷