主要研究三种数字表示
1、无符号编码
2、补码编码
3、浮点数编码
一些基本概念
- 整数表示相对小的数值范围,但是一个精确的结果,浮点数相比可以表示更大的访问,但是一种近似的表示
- 地址:程序将存储器视为一个巨大的字节数组,称为虚拟存储器,存储器的都由唯一的数字来标示,称为地址
- 字:机器字长,表明整数类型和指针数据的标称大小,一般字长为32bit即4个字节,他可以提供4GB的虚拟地址空间
-
数据大小,各个数据类型有不同的大小定义,但在c++中类型大小的定义只是规定了其下限
QQ截图20140823102039.jpg - 寻址和字节顺序:对于大小跨越多个字节的对象需要明白两个基本概念1、对象的地址是多少2、对象在存储器中如何排列这些字节。对于第二点引出了字节顺序的问题,即
- 布尔代数:围绕1、0数学知识体系,基本运算包括
整数表示
-
整形数据类型
QQ截图20140823124036.jpg - QQ截图20140823124231.jpg
-
QQ截图20140823124242.jpg
其中Xw-1为最高位,符号位,权重为-2^(w-1)
从上述公式可知对于一个w位的有符号数其可以表示的访问为
QQ截图20140823124621.jpg -
QQ截图20140823125642.jpg
QQ截图20140823125103.jpg
2、有符号数转无符号数T2U(X) = B2U(T2B(X))
QQ截图20140823125016.jpg
QQ截图20140823125745.jpg -
截断数字
只是将相应的位截断,后根据位模式进行解析
QQ截图20140823130943.jpg -
PS:符号数与无符号数之间的转换存在一定风险,在处理的时候需要特别注意,防止由此产生的溢出导致的bug
整数运算
-
两个无符号数加法的范围为[0 2^(w+1)-2],因此会出现溢出的情况(无符号数范围[0 2^w-1])
QQ截图20140823132028.jpg
QQ截图20140823132037.jpg -
QQ截图20140823132241.jpg
QQ截图20140823132230.jpg -
-
QQ截图20140823133824.jpg -
本质上就是直接运算,之后按照有符号数直接截断解析
QQ截图20140823133900.jpg
QQ截图20140823134255.jpg -
一般将常数拆解成2的次方的累积和,然后左移位操作,通常有以下两种方式
QQ截图20140823134502.jpg -
采用右移的方式,对于无符号数直接采用逻辑右移即可,但对于补码需要采用算术右移,即需要考虑符号位
为了使整形结果最终右移的结果向0靠齐,对于补码在右移前,需要考虑增加一个偏移量
QQ截图20140823135141.jpg
QQ截图20140823135152.jpg
浮点数
-
QQ截图20140823135341.jpg
QQ截图20140823135326.jpg
QQ截图20140823135311.jpg
reference
- 深入理解计算机系统