数制与码制——⼆进制和原码补码反码
数制与码制
数制
基数(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的问题总结与结论