跳转至

位运算(bit)

一、简介

位运算是一种在计算机系统中对二进制数位进行操作的运算。由于计算机内部数据的存储和处理都是以二进制形式进行的,位运算能够直接对整数的二进制位进行高效操作。位运算包括与(&)、或(|)、异或(^)、非(~)、左移(<<)和右移(>>)等基本操作。

二、演示功能概述

本教程教你如何用 Air724 开发板,进行 API 函数基础服务-位运算(bit)。

三、准备硬件环境

3.1 开发板准备

使用 EVB_Air724 开发板,如下图所示:

淘宝购买链接:Air724UG-NFM 开发板淘宝购买链接

此开发板的详细使用说明参考:Air724UG 产品手册 中的《EVB_Air724UG_AXX 开发板使用说明》,写这篇文章时最新版本的使用说明为:《EVB_Air724UG_A14 开发板使用说明》;开发板使用过程中遇到任何问题,可以直接参考这份使用说明文档。

api:https://doc.openluat.com/wiki/21?wiki_page_id=2068

3.2 数据通信线

USB 数据线一根(micro usb)。

3.3 PC 电脑

WIN7以及以上版本的WINDOWS系统。

3.4 SIM 卡

中国大陆环境下,可以上网的 sim 卡。一般来说,使用移动,电信,联通的物联网卡或者手机卡都行。

3.5 组装硬件环境

USB 数据线插入 USB 口,另一端与电脑相连,拨码开关全部拨到 ON,串口切换开关选择 UART1,USB 供电的 4V 对应开关拨至 ON 档,SIM 卡放到 SIM 卡槽中锁紧,如下图所示。

四、准备软件环境

4.1 下载调试工具

使用说明参考:Luatools 下载和详细使用

4.2 源码及固件

4.2.1 底层 core 下载

下载底层固件,并解压

链接:https://docs.openluat.com/air724ug/luatos/firmware/

如下图所示,红框的是我们要使用到的。

4.2.2 本教程使用的 demo 见附件:

右键点我,另存为,下载完整压缩文件包

4.3 下载固件和脚本到开发板中

打开 Luatools,开发板上电开机,如开机成功 Luatools 会打印如下信息。

点击项目管理测试选项。

进入管理界面,如下图所示。

  • 点击选择文件,选择底层固件,我的文件放在 D:\luatOS\Air724 路径中

  • 点击增加脚本或资源文件,选择 之前下载的程序源码,如下图所示。

  • 点击下载底层和脚本,下载完成如下图所示。

五、代码示例介绍

5.1 API 说明

本文用到的接口函数不做详细介绍,可通过点击右侧链接查看具体介绍:bit API

5.2 testBit.lua 代码

打印输出各种位操作指令。

--- 模块功能:闹钟功能测试(支持开机闹钟和关机闹钟,同时只能存在一个闹钟,如果想实现多个闹钟,等当前闹钟触发后,再次调用闹钟设置接口去配置下一个闹钟).
-- @author openLuat
-- @module alarm.testAlarm
-- @license MIT
-- @copyright openLuat
-- @release 2018.03.14

require "sys"
require"misc"
module(...,package.seeall)

sys.taskInit(function()
    sys.wait(10000)

    log.info("按位取反,输出-6",bit.bnot(5))
    log.info("与,--输出1",bit.band(1,1))
    log.info("或,--输出3",bit.bor(1,2))
    log.info("异或结果为4",bit.bxor(2,3,5))
    log.info("逻辑左移,“100”,输出为4",bit.lshift(1,2))

    log.info("逻辑右移,“001”,输出为1",bit.rshift(4,2))
    log.info("算数右移,左边添加的数与符号有关,输出为0",bit.arshift(2,2))
    log.info("参数是位数,作用是1向左移动两位,打印出4",bit.bit(2))
    log.info("测试位数是否被置1",bit.isset(5,0))--第一个参数是是测试数字,第二个是测试位置。从右向左数0到7。是1返回true,否则返回false,该返回true
    log.info("测试位数是否被置1",bit.isset(5,1))--打印false
    log.info("测试位数是否被置1",bit.isset(5,2))--打印true
    log.info("测试位数是否被置1",bit.isset(5,3))--返回返回false
    log.info("测试位数是否被置0",bit.isclear(5,0))----与上面的相反
    log.info("测试位数是否被置0",bit.isclear(5,1))
    log.info("测试位数是否被置0",bit.isclear(5,2))
    log.info("测试位数是否被置0",bit.isclear(5,3))
    log.info("把0的第0,1,2,3位值为1",bit.set(0,0,1,2,3))--在相应的位数置1,打印15
    log.info("把5的第0,2位置为0",bit.clear(5,0,2))--在相应的位置置0,打印0
    sys.wait(2000)

end)

5.3 main.lua 代码

本代码为主程序脚本,系统启动后首先会对 4G 网络进行配置,等待网络连接成功,然后加载测试模块。

六、开机调试

6.1 开发板开机

连接好硬件并下载固件后,启动 Luatools 软件,系统运行信息将显示在界面中。红框中为开发板连接到 PC 机后正常打印的信息,如下图所示。

6.2 功能调试

打印输出各种位操作指令。

七、位操作命令列表

bit.bnot( value )

bit.band( val1, val2, ... valn )

bit.bor( val1, val2, ... valn )

bit.bxor( val1, val2, ... valn )

bit.lshift( value, shift )

bit.rshift( value, shift )

bit.arshift( value, shift )

bit.bit( position )

bit.isset(value, position)

bit.isclear(value, position)

bit.set(value, pos1, pos2, ...posn)

number=bit.clear(value, pos1, pos2, ...posn)