首页 > 其他分享 >LQB01位操作说明

LQB01位操作说明

时间:2023-02-25 12:05:59浏览次数:34  
标签:LQB01 char 函数 位操作 取反 说明 异或 num bitnum


一个字节,包括了8位,可以对其中的8位的某一位进行读或者写;

比如char num=12,如果用十六进制表示,就是0x0C,如果二进制表示,就是0000 1010

位操作函数,主要这里介绍,位读和位写0,位写1,位取反,四个函数。

位读函数,是读取某个字节的数据的某一位,看是0还是1;
比如char num=0xAA,判断num的某个位是0还是1?

第二个函数,是位写函数。
将某个字节的某一位清0或者置1。
比如0000 1010,我将倒数第二个1改为0,其他位保持不变,那么就是成为0000 1000;

怎么实现呢?

第一个,位读函数
我们如何读取某一个位的数据呢?
返回的是当前位的数据,所以函数应该是有个返回值,返回值类型可以是char类型,因为结果只能是0或者1,也可用bit类型。

bit ReadBit(unsigned char readbytetemp);
比如我们a=ReadBit(num);
里面函数怎么实现呢?
位操作,必须涉及四个操作。
就是位或,位与,位取反,以及位异或。

介绍这四个操作。后面就能轻松理解。

位或操作有什么用。

或操作:
b=a或0,c=a或1。
如果a是0,则b=0,c=1;
如果a=1,则b=1,c=1.
结论:或1操作,将结果设置成为1,不管之前是什么数据,或1,则得到1。
或0,保持不变。
(或,有一个是真,那么就是真);

与操作:
b=a与0,c=a与1。
如果a是0,则b=0,c=0;
如果a=1,则b=0,c=1.
结论:与0,将某个数设置成为0;与1,保持数据不变;

异或操作。
b=a异或0,c=a异或1;
异或,相异就是真,两个不一样,就是结果就是真的。
如果a=0,则b=0,c=1;
如果a=1,则b=1,c=0;
结论:
异或0,保持不变,异或1,会将原来的取反。。

上面的理解之后,

  1. 如何编程位读函数呢?

首先将变量的bitnum右移bitnum位,那么左边的补0,右边的被挤出去。

LQB01位操作说明_数据

第二步,与0x01,将倒数的哪一位b0位保持不变,因为与1,保持不变,与0操作,会清0.
结果得到0x0Y。
这个就是最后的结果如果Y是0,那么结果是0,如果Y=1,结果是1.

总结,
returnbit=(charnum>>bitnum)&0x01;
(bitnum范围是0,1,2,3,4,5,6,7)
得到函数。
unsigned char ReadBit(unsigned char datatemp,unsigned char bitnum)
{
return (datatemp>>bitnum)&0x01;
}

位写0函数。

如何将数据的某一位设置0,其他保持不变呢?
可以这么写。
也可以不用函数,不要把自己搞累了。
比如将0x1010 1110的某一位清0,
num=0xab,
将某一位清0,那么就是num =num的哪一位与0,其他位与1
num=num&0b11111110=num&0xFE,将bit0位清0了。
num=num&0b11111101=num&0xFD,将bit1位清0了。

位写1函数。
或0保持不变,或1会设置等于1
num=num|0b00000100=num|0x04,将bit4位置1了。

取反操作。将对应位和1进行异或就行了。其他和0异或保持不变。
num= num^0b00001000
=num^0x08,结果是其他位保持不变,bit3位取反了

你理解了吗?
蓝桥杯的单片机开发板中,LED灯,蜂鸣器,继电器,都需要这个操作哦。希望认真掌握这几个操作。

后面再反过来看看这篇文章吧。


标签:LQB01,char,函数,位操作,取反,说明,异或,num,bitnum
From: https://blog.51cto.com/u_1355431/6085184

相关文章

  • Vue-cli创建的项目结构分析,各初始化文件解释说明
    结构图: 一、项目结构说明 1、.gitignore:git的忽略文件(哪些文件或文件夹不想接受git管理的,可在此文件配置) 2、babel.config.js:babel控制文件,ES6=》ES5 3、packag......
  • pytest测试框架安装使用及注意事项说明
    内容目录:1.安装2.运行3.执行结果4.常用参数说明5.测试文件、用例命名规则 1.安装1>pycharm中安装点击File->Settings在setting页面中点击project:xxx下......
  • Redis 6种淘汰策略说明
    一、键的过期时间Redis可以为每一个键设置过期时间,当键过期之后,会自动删除该键。对于散列表这种容器,只能为整个键设置过期时间(整个散列表),而不能为键里面的单个元素设置过期......
  • SkeyeLive同屏直播库库功能介绍和接口说明与调用
    SkeyeLive是OpenSKEYE开源流媒体团队开发的一个集采集,编码,RTSP/RTMP推流和流媒体RTSP服务于一身的通用库,目前支持Windows,Android平台,通过SkeyeLive我们就可以避免接触到稍显......
  • dremio S3StoragePlugin 简单说明
    S3StoragePlugin核心是进行s3的数据处理,从能力上来说主要是一个文件系统的存储插件,以前我简单介绍过关于存储扩展的开发,一般需要包含一个存储插件配置类以及存储插件的......
  • ShareWAF 软件&云形态安装部署说明
    一、常用文件说明sharewaf.js:主程序daemon.js:主程序守护程序oem.js:OEM定制文件developer.js:二次开发接口rules.js:自定义规则文件regexp.js:正则防护规则文件developer.js:自......
  • 构造函数说明
    1#include<iostream>23usingnamespacestd;456classAdder{7public:89//构造函数10//第一份代码相当于后面的两个函数......
  • Solon2 之基础:三、启动参数说明
    启动参数,在应用启动后会被静态化(为了内部更高效的利用)。比如,想通过体外扩展加载配置,是不能改掉它们的。1、启动参数启动参数对应的应用配置描述--envsolon.en......
  • OpenAI API 参数说明
    OpenAIAPIhttps://platform.openai.com/docs/api-reference/completions/create#completions/create-model  max_tokensintegerOptionalDefaultsto16Themaxi......
  • Github说明--如何在Github里面上传自己的代码
    1、注册一个账号这是必须的啦!不清楚注册步骤的,可以去看看我之前的博客,里面的步骤也是挺详细的呢!2、进入到用户主界面我们会看到这样的一个+标识:选择其中的NewReposit......