文章目录
2022/01/15
进制之间的转化
十进制转二进制
-
方法一:除二取余 对所求的数不断进行除以二再取余数的运算,直到出现商小于二为止,最后将余数倒序排放。
示例:
我们将10用短除法不断进行取余 最后将所得的余数从下往上排放可以得到 1010 即10的二进制数为 0b1010。 -
方法二:按权重计算 即按 …… 23 22 21 20 凑出相应十进制数
示例:同样拿10来进行运算
在8421中我们可以得到 10=1x8+0x4+1x2+0x1 所以 10的二进制数为 0b1010。
二进制转十进制
-
方法一:乘二加余 通过对已知二进制数不断进行乘二加余运算,直到已知二进制数中所有数字全部用完
示例:
0b1011 1x2+0=2 、 2x2+1=5 、 5x2+1=11 即 0b1011 为十进制 11。
-
方法二:按权重计算 即将二进制数中1对应的权重相加计算结果
示例:
8+0+2+1=11 即 0b1011 转为十进制为11
十进制转十六进制
- 方法:除十六取余 对所求的数不断进行除以十六再取余数的运算,直到出现商小于十六为止,最后将余数倒序排放
(参考十进制转二进制的方法一) - 在十六进制中 A-F 代表 10-15
十六进制转十进制
- 方法:乘十六加余 通过对已知十六进制数不断进行乘十六加余运算,直到已知十六进制数中所有数字全部用完
(参考二进制转十进制的方法一)
二进制转十六进制
- 方法:将二进制分为四位一组(从右边分组,左边少数时补0),将每组转化成十进制,再将十进制转化为十六进制。
示例:将 0b1101010 转化为十六进制
0b1101010 分为两组时少一位,故将左端补0得到 0b01101010 将其分成两组 0110 1010 第一组为十进制6 第二组为十进制10 即第一组为十六进制6 第二组为十六进制 A 所以结果为 0x6A
十六进制转二进制
- 方法:将每个十六进制数摘出,转化为十进制,再将十进制转化成二进制。
示例:将 0x4f 转化成二进制
0x4f 单独摘出为 4 和 f 转化成十进制为 4 和 15 ,将其转化成二进制为 0100 1111 所以结果为 0b01001111
为加速计算,可直接背诵下列表格:
十六进制 0x | 二进制 0b | 十六进制 0x | 二进制 0b |
---|---|---|---|
0 | 0000 | 8 | 1000 |
1 | 0001 | 9 | 1001 |
2 | 0010 | a | 1010 |
3 | 0011 | b | 1011 |
4 | 0100 | c | 1100 |
5 | 0101 | d | 1101 |
6 | 0110 | e | 1110 |
7 | 0111 | f | 1111 |
与或非逻辑运算
二进制之间的与或非
与运算:符号 & 0与任何数为0 1与1为1 类似于乘法
数字1 | 数字2 | 结果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
或运算:符号 | 1或任何数为1 0或0为0 类似于加法
数字1 | 数字2 | 结果 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
非运算:符号 ~ 对原来数取反 1成为0 0成为1
原数 | 结果 |
---|---|
0 | 1 |
1 | 0 |
十六进制之间的与或非
- 方法:转换为二进制按位运算
示例: 0xa5 & 0x86
将两者分别转换成二进制可以得到 10100101 和 10000110 再将两者挨位运算可以得到 10000100
简单的单片机案例
原理图
- 导线终端字母相同代表这两根导线是相通的。
- 如想快速知道某一导线另一端与何处相连可用 Ctrl+f 进行搜索。
- 单片机有 P0 P1 P2 P3 四组io口,每组里面又有 0-7 八个io口。
一个LED闪烁案例
#include <reg52.h> //reg52头文件中包含寄存器地址
sbit led=P2^0; //将P2组的第一个io口定义为led
void main()
{
led=1; //使led输出高电平
int a;
while(1) //等效于 while(ture) 程序会在此一直循环
{
led=~led; //对led当前电平进行取反 使P2^0口输出高低交替的电平
a=60000;
while(a--);
}
}
从高位起点亮第1、3、5、7个LED
#include <reg52.h>
void main()
{
P2=0x55; // 0101 0101 即点亮P2组的第 1 3 5 7 个led (由原理图可知 当输出为低电平时led发光)
while(1);
}