一.数制与编码
1.1计算机内部使用二进制编码的原因
- 二进制只有两种状态0,1。,使用两个稳定状态的物理器件就可以表示二进制的每一位,制造成本比较低,例如高低电平,和电荷的正负性也可以用0,1表示。
- 二进制位的0,1对应的是真和假,与计算机的逻辑运算和程序的逻辑判断提供了遍历条件
1.2 基数
r为基数,每个数码位所用到的不同符号的个数,r进制的基数是r
如二进制的基数为2:0,1
八进制:01234567
十六进制:0123456789ABCDEF
1.3 进制转换
1.3.1转十进制
二进制:101.1(2) = 1 x + 0 x + 1 x + 1 x = 5.5(10)
八进制:5.4(8) = 5 x + 4 x = 5.5(10)
十六进制:5.8(16)= 5 x + 8 x = 5.5(10)
1.3.2 进制之间的加法
5.4(8)+ 5.4(8)= 5.4 + 5.4 = 7.0(8)
注意🫠:八进制是逢八进一,所以0.4 + 0.4 不等于 0.8 而是进一 为7
5.8(16)+ 0.9(16) = 6.1(16)
注意🫠:5.8 + 0.9 不等于 6.7。0.8 + 0.9 不等于 1.7,逢16进一应该是 1.1
1.3.3 不同进制转换为10进制
二进制:101.1(2) = 1 x + 0 x + 1 x + 1 x = 5.5(10)
还可以用位权来计算
如 10010010.110 = 128+16+2+0.5+0.25=146.75
1.3.4 2进制与8,16进制之间转换
2进制->8 进制 : 3位一组,😎如果头部和尾部不够的补0
2进制->16 进制 : 4位一组,😎如果头部和尾部不够的补0
8进制-> 2 进制:一位8进制对应3为2进制
16进制-> 2 进制:一位16进制对应4为2进制
注意🤯除了下标以外还有一些进制表示方式
二进制还有B可以表示
十进制 可以用 H 表示
十六进制可以用 D, 也可以用OX表示、
1.3.4 十进制->任意进制
对整数:用除基取余法,除对应进制的基数
最下面的是高位,上面的是低位
对小数用乘基取整法
注意😶🌫️:上面的是高位,下面的是低位
§ 对于十进制转换为二进制还有更方便的方法为拼凑法🤓
1.4 真值与机器值
如 +12,-16
真值:有+-正负号表示的值,如+12,-16
机器值:由于计算机不能识别+-,所以0表示正,1表示负
二.定点数的编码表示
定点数:小数点的位置固定不变 996.07
浮点数:小数点的位置不固定 如9.96007*10^2
无符号数:全部二进制都是表示数值,无表示正负的数
n位无符号数的范围为:0 -
注意🧐我们只讨论无符号整数,不讨论无符号小数。
有符号数:有表示正负的数
2.1 有符号数的定点表示
由于注意🧐我们只讨论无符号整数,不讨论无符号小数。的原因我们需要将一个数的整数部分和小数部分分开来保存。
2.1.1定点整数和定点小数
定点整数:定点整数纯整数,约定小数点位置在有效数值的最后一位隐含
定点小数:定点小数是纯小数,约定小数点在符号位之后。
2.1.2 原码,补码,反码,移码
通用机器字长为8位
(1)有符号整数的原码
若系统分配n+1个bit位,那么符号占一个bit,数值占n个bit,
若字长为n+1原码的整数范围为 -(+1)≤ x ≤ (+1)
真值0有两种表示方式:第一个0与1表示符号,逗号表示符号位与真值的区别
【+0】原码 : 0,0000000;【-0】原码:1,000000
例如:x1为+1110,x2为-1110 ,字长为8为,所以【x1】原= 0,0001110;【x2】= 1,0001110
(2)有纯小数的原码
若字长为n+1则纯小数的原码范围为-(1-)≤ x ≤ (1-)
若x1 = + 0.1101,x2 = -0.1101,字长为8,则原码表示 【x1】= 0.1101000,【x2】= 1.1101000
(3)反码
若符号位为0,即正数。则反码与原码相同
若符号位为1,即负数。则反码为原码的数值位全部按位取反
反码的0也有两种表示方法 +0,-0;
【+0】反码与原码一样= 00000000
【-0】反码 = 11111111 【-0】原码 = 10000000
(4)补码
正数的补码和原码一样
负数的补码 = 反码末位 + 1 但是要考虑加一
2.1.3 原码,补码,反码,移码 的缺点
- 原码的缺点:符号位不能参见运算,需要设计很复杂的电路才能实现,所以我们需要将原码转变成补码,但是反码是过度码