第二章 数据的机器级表示
2.1数制和编码
1.为什么采用二进制
(1)二进制只有两种基本状态
(2)二进制的编码和运算规则都很简单
(3)两个符号1和0正好与逻辑命题的两个值真假对应
2.进位计数制
- 十进制与二进制转换,不再说了,只说一下小数部分,二进制转化为十进制的时候,由左向右对应的数依次为2的负一开始,一直到2的负n,所以在十进制转化为二进制的时候,成2,乘出了一个整数,对应的就是第一位的,乘的2越多,说明他的位数越低
- 二八十六进制的转化非常简单,八进制,是二进制每三位的缩写,十六是每四位。
3.定点与浮点表示
1.定点表示
- 定点小数:小数点固定在最左边
- 定点整数:小数点固定在最右边
2.浮点表示
X = ( − 1 ) S ∗ M ∗ R E X=(-1)^S*M*R^E X=(−1)S∗M∗RE
S是正负1,M是定点小数,R是基数,E是二进制定点整数
所以 ∣ X ∣ |X| ∣X∣的取值范围是
2 − ( 2 m − 1 ) ∗ 2 − n ≤ ∣ X ∣ ≤ ( 1 − 2 − n ) ∗ 2 2 m − 1 2^{-(2^m-1)}*2^{-n}\leq|X|\leq(1-2^{-n})*2^{2^m-1} 2−(2m−1)∗2−n≤∣X∣≤(1−2−n)∗22m−1
4.定点数的编码表示
这个主要是为了解决正负号的问题
1.原码表示法
- n位数值位和1位符号位
- 但是零会有两种形式 正零000…0和 负零1000…0,两种形式。所有使用不方便
- 而且,加减异号数的时候,需要先判断绝对值的大小,再确定最终的加号,总之这种办法,几十年前就不用了
2.补码表示法
采用了模运算,所以减法可以用加法来实现
补码的定义 正数的补码就是其本身,负数的补码等于模与该负数绝对值的差。
- 当 X T 为 正 数 时 , [ X T ] 补 = X T = ( M + X T ) ( m o d M ) 当X_T为正数时,[X_T]_补=X_T=(M+X_T)(mod M) 当XT为正数时,[XT]补=XT=(M+XT)(modM)
- 当 X T 为 负 数 时 , [ X T ] 补 = M − ∣ X T ∣ = ( M + X T ) ( m o d M ) 当X_T为负数时,[X_T]_补=M-|X_T|=(M+X_T)(mod M) 当XT为负数时,[XT]补=M−∣XT∣=(M+XT)(modM)
- 所 以 对 于 任 意 的 数 [ X T ] 补 = ( M + X T ) ( m o d M ) 所以对于任意的数[X_T]_补=(M+X_T)(mod M) 所以对于任意的数[XT]补=(M+XT)(modM)
所以推得了由n-1位数值位和一位符号位的二进制整数来说其补码的定义为(注意右侧取不到等号,左侧取得到等号)
[ X T ] 补 = ( 2 n + X T ) ( m o d M ) ( − 2 n − 1 ≤ X T < 2 n − 1 ) [X_T]_补=(2^n+X_T)(mod M)(-2^{n-1}\leq X_T<2^{n-1}) [XT]补=(2n+X