学习单片机有一段时间了,为了加强记忆,在这里总结一下所学的知识。
1、进制
1.1不同进制
10进制(Decimal):0,1,2,3,4,5,6,7,8,9
8进制(Octal):0,1,2,3,4,5,6,7
16进制(Hexadecimal):0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
计算机采用的是二进制,即只能识别0和1,不存在十进制,八进制和十六进制。八进制和十六进制只是为了将二进制表示的更简略。
1.2 进制转换
(1)二进制数转换为十进制数:源数的各位数码乘以各自的权值,再求和
11001101.011B
=1x27+1x6+1x23+1x22 +1x20+1x2-2 +1x2-3
=205.375
(2)十进制数转换为二进制数
整数部分:除以2的基数取余,至商为0,倒排
小数部分:乘以2的基数取整,适可而止,顺排
例如:
205.375D=?B
所以205.375D=11001101.011B
同理,不同的进制数之间转换道理相同,只要把除和乘的数换成目的数就可以了。
1.3机器数与真值
什么是机器数?机器数顾名思义就是一个数在计算机中的表示形式。
(1)机器数可以只用正数,即无符号数。如:10001001B=137D
(2)机器数也可以将数的最高位作为符号位来表示数的正负。规定:最高位为0时表示正数,最高位为1时表示负数。
此时上面例子中的10001001B=-9D
(3)机器数所能表示的数的范围受机器字长的限制。
1.4 位,字节,字和双字长数
位(Bit):每个数字符号(数码0或1),位长为1
字节(Byte):每连续8个数码,字节长8
字(Word):计算机一次能同时处理的一串连续二进制数码(字长为16位,32位或64位)
双字(Double Word):占两个字长度
1.5 原码,补码,反码
符号数的原码、补码和反码的区别如下。
原码
正数:符号位0,数值部分与真值绝对值同值
负数:符号位1,数值部分与真值绝对值同值
反码
正数:符号位0,数值部分与真值绝对值同值
负数:绝对值按位取反
补码
正数:符号位0,数值部分与真值绝对值同值
负数:绝对值按位取反后加1
注意:计算机内,带符号数一般都以补码的形式在机器中存放和运算。
1.6运算
补码加法
[X+Y]补=[X]补+[Y]补;
步骤:
(1)将两个数先变成补码;
(2)对两个数进行加法运算,若最高位上有进位则舍弃不要;
(3)判断结果是否溢出;
(4)若结果溢出,则这次运算结果不正确。若没有溢出,对结果再次求补码,得到结果的真值。
溢出
当两个符号数的运算结果超过了给定长度二进制可以表示的范围。
加法可能溢出的情况:
(1)两个正数相加:两个正数补码和的符号位为1
(2)两个负数相加:两个正数补码和的符号位为0
例子1:计算20+(-10)
1)将两个数先变成补码:
[20]补=00010100 [-10]补=11110110
2)作补码加法:
00010100 + 11110110 = 00001010
3)正数加负数不可能溢出。现在 结果为正数,直接求真值
(0000010)2 = 54
例子2:计算64+65
1)将两个数先变成补码:
[64]补=01000000 [65]补=01000001
2)作补码加法:
01000000 + 01000001 = 10000001
3)两个正数相加的结果符号位为1,则加法的和出现了溢出
出现溢出的原因是二进制数的长度不够造成的。若用16位二进制数,可得到正确答案
补码的减法
[X-Y]补=[X]补-[Y]补=[X]补+(-[Y]补)
=[X]补+([Y]补)补
注意:求[-Y]补的方法:将[Y]补求出来然后将[Y]补各位连同符号位取反,再在末位加1,如运算过程中符号位产生进位,则自动丢失。
BCD码
对每个十进制数字分别编码 – BCD (Binary Coded Decimal)码
(1)8421码
(2)格雷(Gray)码
(3)余3码