进制转化、逻辑运算、简单案例

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
0000081000
1000191001
20010a1010
30011b1011
40100c1100
50101d1101
60110e1110
70111f1111

与或非逻辑运算

二进制之间的与或非

与运算:符号 & 0与任何数为0 1与1为1 类似于乘法

数字1数字2结果
000
010
100
111

或运算:符号 | 1或任何数为1 0或0为0 类似于加法

数字1数字2结果
000
011
101
111

非运算:符号 ~ 对原来数取反 1成为0 0成为1

原数结果
01
10

十六进制之间的与或非

  • 方法:转换为二进制按位运算
    示例: 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);
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值