- 帖子
- 120
- 主题
- 79
- 精华
- 0
- 积分
- 60
- 在线时间
- 5 小时
- 注册时间
- 2010-10-13
|
- 概述
计算机最基本的功能就是对数进行计算和处理,每一个数在机器中是用器件的物理状态来表示的,计算机是用器件的两种物理状态来表示数的变化,即利用器件的高电平“1”和器件的低电平“0”这两种状态;不同的0和1组合就可表示不同的数或值。如:10001000就表示88H;而计算机在对数进行处理时只认0和1,所以就有以下的不同数制的转换。 - 数制的分类
1。基数:指某一种数制所用到的数码的个数,如:N=M.r;r就表示基数,当r取不同的值时,就形成不同的进制数,最常用的有十进制数(r=10),十六进制数如上88H(r=16),八进制(R=8),计算机中使用的二进制(r=2).
2。十进制数
生活中我们常用它;如:10元钱、55路车等;它的基数为10,即数码个数有十个,10个不同的数:0、1、2、3、4、5、6、7、8、9;
十进制计数制的规律:有0-9十个不同的数码;R=10,在加减运算中,采用“逢十进一”和“借一当十”的规则。
3。十六进制数
R=16,表示有十六个数码组成,即:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F;“逢十六进一”和”借一当十六“。
4。二进制数
R=2,只能取两个数码,即:0、1;“逢二进一”和“借一当二”。 数制的详细使用 1 十进制数Decimal Number在日常生活中我们表示数的多少用的是十进制数即 0123456789它遵循逢十进一借一当十的原则通常我们把计数符号的个数叫做基数十进制的基数就是十比如一个十进制数 5847=5*1000+8*100+4*10+7*1它的每一个数码都有一个系数1000100101这个系数叫做权或位权十进制数虽然非常符合我们的使用习惯但计算机中却无法采用因为计算机只能有两种状态0和1所以我们还得应用二进制数2 二进制数Binary Number二进制的基数为二 0和1它遵循的是逢二进一借一当二的进借位原则也就是当某位计数到两个数时就向高位进同时本位变为比如二进制数 1100=1*23+1*22+0*21+0*20二进制数只有0和1两个数正好代表了计算机中电路的两种工作状态所以它在计算机中被广泛应用下面是二进制的加法和乘法运算规则加法 0+0=01+0=0+1=11+1=10乘法 0*0=01*0=0*1=01*1=1二进制数虽然在计算机中处理很方便但当位数较多时就不容易记忆和书写了所以计算机中又有了十六进制数 3 十六进制数Hexadecimal Number十六进制也遵循两个规则一是有十六个基数即 0123456789ABCDEF另一个规则是逢十六进一借一当十六比如我们前面提到的 #0FFH就是一个十六进制数#--我们已经明白了它表示的是传递数的本身H叫数制简码它表示这个数是十六进制数为什么前面我在标题后面都加了英文注释相信大家也应该明白了吧这里随便提一下二进制简码B和十进制简码D通常是可以省略的我们以后的课程中用到的数都是这样写的那么0FFH这个十六进制数的表示方法是怎么样的呢用十进制就是表示0FFH=F*161+F*160即等于255大家也许会疑问这里的0到哪里去了呢原来在单片机中当我们用十六进制格式表示一个数时如果高位的数字为A-F时高位前面就得加上个0不然编译软件会出错就象#0FFH二进制之间的转换 十进制有使用比较习惯的特点二进制有易于表示和运算方便的特点十六进制又有表示位数较多的特点但有时我们常常要把十进制数转换成二进制数或十六进制数来处理把二进制数逆转换成十六进制数如何进行这种转换呢下面就举几个例子 1 十进制数与非十进制数之间的转换1 非十进制数转换为十进制数具体做法是将一个非十进制数按权展开成一个多项式每项是该位数码与相应权值之积把多项式按十进制的规则进行计算求和所得的结果就是该数的十进制形式 比如二进制数 1011B转换成十进制为1*23+0*22+1*21+1*20=8+2+1=11D再比如十六进制数FFH转换成十进制为255D2 十进制数转换为非十进制数十进制数转换为非十进制数时可将其分为整数部分和小数部分分别进行转换最后将结果合并为目的数为了简单我这里只讲整数部分的转换这种转换叫做除基取余法具体做法是用欲转换数制的基数去除十进制数的整数部分第一次除所得余数为目的数的最低位把得到的商再除以该基数所得余数为目的数的次低位依次类推继续上面的过程直至商位为0此时所得余数为目的数的最高位 比如将十进制数 53D转换成二进制数为53D=110101B2 └532 └2612 └1302 └612 └302 └110 1 2 二进制数与十六进制数之间的转换四位二进制共有16种组合而这16种组合正好与十六进制数的16个基数一致所以每4位二进制数对应一位十六进制数我们只要把二进制数的整数部分自右向左每4位一组最后不足4位的用0补足小数部分自左向右每4位一组最后不足4位的在右面补0再将每4位二进制数对应的十六进制数写出即可相反如果将十六进制数转换为二进制数只需将每位十六进制数写成对应的4位二进制数即可 比如将 1101011B转换成十六进制数为D6H再比如将F0FH转换成二进制数为111100001111B
十进制数 |
二进制数 |
十六进制数 |
0 |
0000 |
0 |
1 |
0001 |
1 |
2 |
0010 |
2 |
3 |
0011 |
3 |
4 |
0100 |
4 |
5 |
0101 |
5 |
6 |
0110 |
6 |
7 |
0111 |
7 |
8 |
1000 |
8 |
9 |
1001 |
9 |
10 |
1010 |
A |
11 |
1011 |
B |
12 |
1100 |
C |
13 |
1101 |
D |
14 |
1110 |
E |
15 |
1111 |
F |
16 |
10000 |
10 |
上面的表格就是二进制数十进制数和十六进制数之间的对应关系 三立即数的写法 在教程里我们讲到MOV R7#250和MOV R7#OFFH中#250和#0FFH原来是十进制数250D和十六进制数FFH的区别在单片机中通常我们把这个数称之为立即数那么如果我在编写指令时把立即数#0FFH写成二进制数即11111111或用十进制写法255是不是可以呢当然可以立即数既可以是二进制数也可以是十进制数或十六进制数讲到这里你应该明白了为什么我们前面的实验把#0FFH送到P3口会使P3.7-P3.0变为高电平这里再重复一遍那就是当用十六进制格式表示一个立即数时如果高位的数字为A-F时高位前面要加上个0请大家务必记住了这是一个常识问题可很多书上都不提所以很多人在做实验时往往会编译出错 这里简单地讲了一下关于数制以及二进制十进制和十六进制数的关系大家可以在以后的实际使用中领会。。。。。 下面讲一下常用到三个概念:
位的含义:在二进制中的每一个0或1,就表示二进制的一个位,“位”,用BIT表示。如89C51的P1接口有8个引脚,外接8只发光二极管,假设要P1口接地(即“0”电平)8个LED才亮,这时就可以这样理解P1的8个引脚为8位二进制数,这样就有8种“0”和“1”的状态,就可以控制外接的8个LED发光管的亮和灭。 - 字长
每8个二进制数组合在一起就称为一个字节;如:10010001,即一个字节由八位二进制数组成。
字长:即二进制的位数,它表示计算机的速度,即每计算一次所能处理的二进制数的位数(个数),象89C51为8位机,而家用电脑以达到32位甚至64位的字长处理能力。 |
|