数制与码制
数制
基数(Radix)
指表示计数进制所用的字符或数码的个数,是每一个数位可能出现的所有符号;并写为数的下标用来表示数字采用什么进制
十进制: 0~9 十个阿拉伯数字
二进制: 0~1
十六进制: 0~9 和 A~F
位权值(Weight)
指数制中每个数位对应的位值
十进制数:100 的百位数字的位权值就是10^2
二进制(Binary Number System)
加减计算:逢二进一,借一当二
乘法:有二进制数 b
b*2^k == b的小数点向右移k位,k可以为负(即为除法)
二进制 八进制 和 十六进制的转化
每三位二进制数等于一位八进制数,每四位二进制数等于一位十六进制数
二转八:以小数点为原点,分别向左右每三位分组,不足三位时用0补齐,每一组对应转化为八进制数;
二转16: 以小数点为原点,分别向左右每四位分组,不足的用0补齐,每一组对应转化为16进制数;
须知:每一组转化后,将转化得到的数字按原来序列排布即可
例如:
101110.1010(二进制)=(0010 1110.1010)= 2E.A(十六进制)
101110.1010(二进制)=(101 110,101 000)=56.5(八进制)
码制
数据的表示方法
真值法和机器数
真值法: 正负用符号+ 和- 来表示
机器数: 将+ 和- 数码化, 用特定的数码来表示
符号位和数值位(机器数的表示)
原码(存在+0和-0,不能变减法为加法带符号位计算)
数值位部分为真值法表示的数的绝对值,符号位和真值法中的符号一一对应
原码 == 符号位编码 + 真值绝对值
+8 == 0//符号位 100//数值位==0100
-4 == 1 10==110
反码(存在+0和-0)
符号位和原码相同
数值位:正数->和原码相同 负数->原码数值位按位取反
+8 原码: 0100 反码: 0 100 正数不取反
-4 原码: 110 反码: 1 01 负数取反
补码
模
指一个计量系统的计数范围,例如时钟计量范围是0~11,模=12
那么n位的计算机的计量范围是0~(2^n)-1,模 = 2 ^n
模实质上是计量系统产生的溢出的量,他的值在系统中无法表示,只能表示其余数
任何有模的计量系统,均可以化减法为加法
最后一句话的理解:
11点钟调整到3点钟
可以顺时针拨4个小时(11+4)%12
可以逆时针拨8个小时 (11-8)%12
两者关系记为: -8=4 (mod 12)
意为:-8和4对模12是互补的,(或 以12为模时,两者互为补码)
补码表示法
正数与原码相同
负数的补码的符号位是1,数值位为其反码的末尾加1(注意,末尾包括小数点后的数字)
原码:1 1010
反码:1 0101
补码:1 0101+1=10110
原码:-0.1010 = 1.1010
反码:1.0101
补码:1.0101->1.0101+0.0001->1.0110
三者对应表格
可以看出:
正数的原码反码补码均相同
负数反码为原码符号位不变,数值位按位取反,补码是继续在反码的基础上末尾加1
为何补码可以带符号位计算
其实反码已经能够带符号位计算了,但是要将进位得到的数字加到末尾,才能得到结果
补码直接在码制上末尾加一,就可以直接将符号位的进位丢掉,就得到正确结果;而且正好也解决了两个0的问题