1.信息存储
虚拟内存被视为字节数组,每个字节都有唯一的数字(即它的地址)来标识;地址的集合即为虚拟地址空间;
指针包括值和类型:值表示某个对象的位置,类型表示那个位置所存储的对象的类型
1.1十六进制:在c语言中0x,0X开头的数字常量被认为是十六进制
1.2字数据大小
字长:字长为x的机器,虚拟地址范围为0-2^x - 1
1.3寻址和字节顺序
大端法:最高有效在前
小端法:最低有效在前
1.4表示字符串
1.5表示代码
1.6布尔代数简介
2.整数表示
2.1整数数据类型
反码:正数的反码是本身,负数的反码是除了最高为都取反
补码:正数的补码是本身,负数的补码为 (源码的补码 + 1),这样可能会产生进位,高位丢弃,只保留源码的位数。
关于为什么int 的最小值是2的31次方
首先我们很清晰的知道,对于(-2^31) + 1 ~ 2^31 - 1 都有自己的源码表示,因为0存在+0和-0.这是没有必要的,所以计算时-0和-2^31的表示相同,在限定位数的情况下可以用-0来表示-2^31
2.2无符号数的编码
2.3补码编码
2.4有符号数和无符号数的转换:转换时,二进制位不变,但是解释规格改变导致值改变
2.6拓展一个数字的位表示
2.7截断数字:截断数字时有限丢弃高位
3.整数运算
3.1无符号加法
有符号加法溢出检测
无符号加法溢出检测
3.2补码加法
-x = ~x + 1
3.4无符号乘法:溢出优先舍弃高位
3.5补码乘法:相当于先计算乘积然后mod 2^w 然后取补码
3.6乘以常数:因为乘法指令相当的满,所以编译器进行优化,尝试用(移位和加法)来代替乘以常数因子的乘法
3.7除以二的幂:整数除以二的幂相当于右移
4.浮点数
4.1二进制小数
二进制小数的表示方法:
在二进制小数中小数点左移一位相当于被2除,右相当于乘
1/5可以用十进制精确的表示,而二进制不能精确表示它,我们可以通过表示的精度。例如:
4.2IEEE浮点表示
4.2.1规格化的值:解码被解释为有符号整数
4.2.2非规格化的值:①用来表示数字0②表示非常接近0的值
4.2.3特殊值(阶码全1):①小数域全0。当s=0时为正无穷,s=1时为负无穷②小数域非全0,代表一些运算的结果不是实数或无穷,如根号-1
4.3数字示例
4.4舍入:找到“最接近”原值的浮点数,IEEE定义了四种不同的舍入方式
4.5浮点运算:浮点加法尽量不适用结合律