2.1进位计数制

一、数制

进制:进位计数制,是指用进位的方法进行计数的数制。

数码:是用来表述数的符号。如十进制的0、1、2、3、4、5、6、7、8、9

基数:数码的个数称为"基数"或"基",通常用R表示,称为R进制。

位权:数码在不同位置上的权值。如:十进制的164,1的权值为10²,6的 权值为10的一次方,4的权值为10的零次方。

数制的表示方法:下标表示法:二进制()2     八进制()8      十进制()10    十六进制()16

                              后缀表示法:二进制B       八进制O       十进制D      十六进制H        如:011H

1、二进制、八进制、十六进制转化为十进制

即不同位置上的数与其权值的乘积之和

☆为什么计算机会使用二进制来存储和运算?

答:①可使用两个稳定状态的物理器件表示。

②0,1正好对应逻辑值的真、假,方便实现逻辑运算。

③可很方便地使用逻辑门电路实现算术运算。

2、十进制转化为二进制、八进制、十六进制

上图解释:十进制转化为二进制,整数部分就是将一个数不断除2,除到0,其余数从下往上组成整数部分的二进制数。小数部分就是将十进制的小数不断乘2直到结果为0(若结果一直不为0,那就截取适当位的小数),将小数乘2过程中产生的整数部分取出,从上往下读组成二进制数。

注意:十进制的整数都可以使用二进制完全表示,但是十进制的小数有的不能使用二进制完全表示。如:0.3

八进制和十六进制的与二进制的做法相同,只不过将除数和乘数换成对应的基数。

3、二进制、八进制、十六进制之间的转换

二进制中 1000表示8,10000表示16

因此二进制转换为八进制的方法为:整数部分从右边开始,每三个一组,转化为八进制,若最左边不足三位,则补零,小数部分从左边开始,每三个一组,转化为八进制,若最右边不足三位,则补零。如下:

对1011 1101.1001进行转换(绿色背景为补的零,三个一组)

01011 1101.100100    

2      7     5  .  4     4       

八进制转换为二进制,只需要反过来 

 2          7           5        .     4         4

 010      111         101    .    100     100                                                    

二进制转换为十六进制的方法为:整数部分从右边开始,每四个一组,转化为十六进制,若最左边不足四位,则补零,小数部分从左边开始,每四个一组,转化为十六进制,若最右边不足四位,则补零。如下:

对1011 1101.10010进行转换(绿色背景为补的零,四个一组)

1011 1101.1001 0000    

B         D    .  9    .  0

十六进制转换为二进制,只需要反过来

 B               D      .       9      .      0

 1011       1101   .      1001        0000

4、真值与机器数

真值:有正负号,人们日常写的数。

机器数:将正负号数字化的数,机器中使用的数。

二、定点数的编码

1、定点数与浮点数

定点数:小数点的位置固定。

浮点数:小数点的位置不固定。(像十进制中的科学计数法,有阶码)

2、无符号数

无符号数:整个机器字长的所有二进制位都是数值位,没有符号位的数。

表示范围:n位无符号数表示范围为,0~2^n-1

注意:通常只有无符号整数,没有无符号小数。

3、有符号数的定点表示

注意:可以使用原码、反码、补码来表示定点整数和定点小数,还可以使用移码来表示定点整数。

①原码

原码:用尾数表示真值的绝对值,符号位的01表示正负。

表示范围:若机器字长为n+1位,则尾数占n位。整数表示范围为,-(2^n-1)~2^n-1。小数表示范围为,-(1-2^(-n))~1-2^(-n)。

注意:1,0010011表示-19D,1.1100000表示-0.75D。注意看,符号位和数值位分割时,整数用的逗号,小数用的点。

☆真值0有+0和-0两种形式。

②反码

反码:若符号位为0,则反码与原码相同。若符号位为1,则数值位全部取反。

表示范围:若机器字长为n+1位,则尾数占n位。整数表示范围为,-(2^n-1)~2^n-1。小数表示范围为,-(1-2^(-n))~1-2^(-n)。

☆真值0有+0和-0两种形式。

③补码

补码:正数的补码=原码,负数的补码=反码末位+1

表示范围:若机器字长为n+1位,则尾数占n位。整数表示范围为,-2^n~2^n-1。小数表示范围为,-1~1-2^(-n)。

注意:规定补码1,0000000表示-2^7,规定补码1.0000000表示-1

☆真值0只有一种表示形式。

将补码->原码的方法:尾数取反,末位+1

④移码(只能用于表示整数)

移码:在补码的基础上,将符号位取反

表示范围:若机器字长为n+1位,则尾数占n位。整数表示范围为,-2^n~2^n-1

☆真值0只有一种表示形式。

作用:将移码所有二进制位看做无符号数,当真值增大的时候,移码对应的无符号数也是递增的。所以,移码表示的整数很方便对比大小。

⑤例子演示

以-19为例!

原码:1,0010011

反码:1,1101100

补码:1,1101101

移码:0,1101101

三、各种码的作用(补充)

我们要计算一个正数和一个负数的加法时,如果我们使用原码进行计算,那么结果是不正确的。所以,如果我们要让计算机算对,那么就需要在ALU中集成减法器和加法器。而减法器比加法器更复杂且所需成本更多。

如:计算-14和+14相加,原码二进制为00001110和10001110的加法,正确的结果是0,而用原码直接相加,结果是错误的。

如果,可以使用加法代替减法,那么就不需要在ALU中集成减法器,降低了成本。在数论中如果满十进一,那么9-3与(9+7)mod10的结果相同。而机器字长是固定的,这就天然的进行了取模运算。所以,只需要找到-3的补数,即与-3相加为10的数,代替-3,那么结果还是一样的。而这个数,就是-3的补码。所以当我们再去运算减法时,就可以当做加法运算。

这就是补码的作用:将减法用加法等效替换。

所以在运算时,将所有位相加,就是正确的结果。而无符号数的运算,将所有位相加也是正确的结果。所以不论是有符号数还是无符号数,运算都统一了。

如:计算-14和+14相加,补码二进制为00001110和11110010,结果为0。

四、C语言中的强制类型转换

注意:C语言中定点整数是用“补码”存储的。

无符号数与有符号数之间的转换:不改变数据内容,改变解释方式。

长整型变短整型:高位截断,保留低位。

短整型变长整形:符号扩展(有符号数进行符号扩展,无符号数零扩展)

☆什么情况下需要进行数据扩展?

①ALU的位数是固定的,所以在运算前,都需要将数据的尾数扩展到与ALU位数相同。

②寄存器的位数也是固定的,所以将数据存入寄存器时,也需要将数据扩展到与寄存器位数相同。

③主存中各个数据的长度不一定相同,所以,有时候需要进行数据的扩展。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会算法的笨小孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值