数字电路基础知识之数值表示 、进制转换

电子说

1.2w人已加入

描述

01数值表示:

在计算机系统中,要表示一个数,原则上我们可以使用任意进制来描述,但在实际应用中一般用二进制、八进制、十进制、十六进制来表示一个数。

二进制表示一个数只能用0、1两个数字来表示,比如10011(十进制是19);

八进制表示一个数只能用0~7八个数字来表示,比如017(十进制是15). 八进制通常以0开头,用来区分十进制;

十进制表示一个数只能用0~9十个数字来表示,这是平时经常用的,比如100

十六进制表示一个数只能用09,AF这16个数字来表示,其中A~F换成10进制就是10-15,十六进制通常以0x开头,用来区分十进制。比如0x1f(十进制是31)

通过上面的介绍,我们也可以看出,N进制表示一个数,可以用0~N之间的N个数字来表示,N进制表示的数,转换成十进制的方法如下:

数字的值*N((数字所在位置-1)次方)

比如六进制表示一个数125,那么如何算这个数的十进制表示的值呢?换算方法如下:

1(6的2次方)+2*(6的一次方)+5*(6的0次方) = 53

02

进制转换

上面介绍了一个数值如何用进制来表示,对同一个数值而言,可以用多种进制来表示,进制之间可以相互转换。在实际应用中,N进制换算成M进制,我们一般会先从N进制换算到十进制,再从十进制换算到M进制。下面我们通过一些例子来说明进制之间如何转换。

01

十进制转二进制

把该十进制数,用二因式分解,取余。

以235为例,转为二进制

235除以2得117,余1

117除以2得58,余1

58除以2得29,余0

29除以2得14,余1

14除以2得7,余0

7除以2得3,余1

3除以2得1,余1

从得到的1开始写起,余数倒排,加在它后面,就可得11101011。

02

**十进制转八进制

**

把该十进制数,用8因式分解,取余。

以100为例,转为八进制

100除以8得12,余4

12除以8得1,余4

1除以8得0,余1

转成八进制就是0144

03

**二进制转十进制

**

二进制转为十进制要从右到左用二进制的每个数去乘以2的相应次方。

以二进制数10101为例

  • 1 (2的4次方)+1* (2的2次方) + 1*(2的0次方) = 21**

03

小数的表示方法

一个数会包含整数部分和小数部分,上面章节已经讲述了整数部分如何表示,本小结介绍一下小数部分是如何表示的。

  • 实数A可以用二进制表示为(An (2* N) + An-1 (2 (N-1))+…+A2 * 2(* 2) + A1 (2* 1) + A0+ A-1(2* (-1) )+ A-2(2**(-2)) +……).**

从上面可以看到,小数部分就是2的负幂次方多项式构成,因此小数的数值用二进制表示就是从高到底依次为A-1A-2A-3A-4….

用多项式描述一个数,可以看到存在一个问题就是小数部分存在无法精确表示的问题,比如0.6 这个小数数值,如果用二进制的话,2的负幂次方多项式只能无限接近,但无法等于0.6。

十进制的小数数值用二进制来表示方法:

将该数字乘以2,取出整数部分作为二进制表示的第1位;然后再将小数部分乘以2,将得到的整数部分作为二进制表示的第2位;以此类推,知道小数部分为0。举例如下:

十进制0.4转成二进制:

0.4 * 2 = 0.8 整数部分是0

0.8 * 2 = 1.6 整数部分是1

0.6 * 2 = 1.2 整数部分是1

0.2 * 2 = 0.4 整数部分是 0

可以看到进入循环了,因此0.4的二进制表示为0110 0110 0110 …..

二进制小数转成十进制方法:

按位乘以权重,然后相加。二进制小数点后第1位乘以2^(-1),第2位乘以2^(-2)

以此类推,然后相加即可

**例如:0.101——>12^(-1)+02^(-2)+1*2^(-3)=0.5+0+0.125=0.625**

十进制小数数值转成其他进制也是类似的,所有的原理都是一个实数可以用一个多项式来表示,正数次幂部分代表的是整数部分,负数次幂部分代表的是小数部分。

04

有符号数和无符号数

从底层硬件来讲,存储的都是0/1这样的状态,本是是没有有符号和无符号之分的。但计算机应用时,根据描述现实世界的需求,可以在软件中指定这个变量是有符号变量还是无符号变量,从而这个变量的数值是有符号数值还是无符号数值。因此这两个定义其实是计算机应用的范畴。

有符号和无符号数,简单的区别就是,无符号数所有的位都是用来表示一个数,有符号数最高位用来表示符号位,其他位用来表示实际的数值。对于某一个具体的数值,不管是有符号表示还是无符号表示,它的二进制表示都是一样的。

在8位机的系统中,地址和数据总线是8bit的,无符号变量表示的值的范围是0255,有符号变量表示的值的范围是-128127

另外还有一点,如果一个数值声明为有符号数,那么最高位是bit位,这是按照二进制表示这个数值之后的最高位,其实在计算系统里面,比如有8位机,16位机,32位机,64位机,一个数的最大位宽也就上面对应的bit数, 如果某个数标识为有符号数,那么对应第7bit, 15bit,31bit,63bit就是符号位。

05

原码反码补码

这三个概念其实都是对有符号数来讲的,无符号数不存在上面这些概念。

这些概念都是为了在计算机系统中描述一个负数而创建的,通过这些概念扩展二进制数字系统,从而可以表示有符号数。

正数的原码、反码、补码都是一样的。

负数的原码就是符号位为1,其余位表示真值,举例如下(8位机):

-2的原码就是1000_0010(高位符号位为1,其余位是2)

负数的反码其实是在原码的基础上, 符号位不变,其余各个位取反,举例如下(8位机):

-2的反码就是1111_1101(在-2的原码上,符号位不变,其他位取反)

负数的补码是反码+1,举例如下(8位机):

-2的补码就是1111_1110(在-2的反码上加1)

所以我们这里讲这三个概念,有一个大前提就是,要明确好当前这个系统是多少bit的系统,这样才能确定符号位是哪bit。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分