LQB01位操作说明

news/2024/4/20 17:22:41/文章来源:https://blog.csdn.net/lmf666/article/details/129163115

一个字节,包括了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,右边的被挤出去。
在这里插入图片描述

第二步,与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灯,蜂鸣器,继电器,都需要这个操作哦。希望认真掌握这几个操作。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_72637.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【消费战略方法论】认识消费者的恒常原理(一):消费者稳态平衡原理

“消费战略”是塔望咨询基于大量的战略与营销实践经验结合心理学、经济学、传播学等相关专业学科的知识应用进行提炼与创造形成的战略方法体系。消费战略强调以消费者为导向,进行企业、品牌战略、品牌营销的制订和落地,企业经营的每个环节和输出的每个动…

轻松搭建Redis缓存高可用集群

1. 安装单机Redis 安装步骤: 1.1 下载redis 官网下载3.0.0版本,之前几的版本不支持集群模式 下载地址:http://download.redis.io/releases/redis-3.0.0.tar.gz 1.2 首先需要安装gcc yum install gcc 1.3 创建目录 cd /usr/mkdir soft1.…

GitHub标星30K+的Java面试八股文长啥样?

2023年的互联网行业竞争越来越严峻,面试也是越来越难,一直以来我都想整理一套完美的面试宝典,奈何难抽出时间,这套1000道的Java面试手册我整理了整整1个月,上传到Git上目前star数达到了30K 一、32 道 MySQL 面试题 1&…

DACS: Domain Adaptation via Cross-domain Mixed Sampling 学习笔记

DACS介绍方法Naive MixingDACSClassMix![在这里插入图片描述](https://img-blog.csdnimg.cn/ca4f83a2711e49f3b754ca90d774cd50.png)算法流程实验结果反思介绍 近年来,基于卷积神经网络的语义分割模型在众多应用中表现出了显著的性能。然而当应用于新的领域时&…

乐友商城学习笔记(一)

SpringCloud 什么是SpringCloud 在SpringBoot基础上构建的微服务框架固定步骤 1.引入组件的启动器2.覆盖默认配置3.在引导类上添加相应的注解 eureka 注册中心,服务的注册与发现服务端 1.引入服务器启动器:eureka-server2.添加了配置 spring.applicati…

leetcode 21~30 学习经历

leetcode 21~30 学习经历21. 合并两个有序链表22. 括号生成23. 合并K个升序链表24. 两两交换链表中的节点25. K 个一组翻转链表26. 删除有序数组中的重复项27. 移除元素28. 找出字符串中第一个匹配项的下标29. 两数相除30. 串联所有单词的子串小结21. 合并两个有序链表 将两个升…

opencv-StereoBM算法流程(二)

OpenCV BM对于处理非畸变的立体图像, 主要有以下 3 个步骤:1. 预处理滤波: 使图像亮度归一化并加强图像纹理2. 立体匹配: 沿着水平极线用 SAD 窗口进行匹配搜索3. 再滤波: 去除坏的匹配点.匹配之后, 如果左右视差检查使能了 disp12MaxDiff > 0, 还有使用cv::validateDispari…

复习知识点三:做人不能半途而废,就算躺平也要躺最舒服的那张床

目录 运算符​编辑 键盘录入: 练习:键盘输入数字并求和 练习: 算术运算符 隐式转换(自动类型提升) 强制转换 练习1: 字符串的 "" 操作 ​编辑 练习 1: 练习2: 练习3: 自增自减运算符 赋值运算符 关系运算符(比较运算符)的分类 练习: 逻辑运算符 短路逻辑运…

qt qchart学习

Qt Charts主要由QChartView、QChart、QLegend图例、坐标轴(由QAbstractAxis子类实现)、**数据源(由QAbstractSeries子类实现)**等组成使用QChart的前期准备1. Qt5.9及以上版本;2. .pro文件中添加QT charts3. 在使用QChart的各个控件之前,引用头文件并必…

Vulnhub靶场----4、DC-4

文章目录一、环境搭建二、渗透流程三、思路总结一、环境搭建 DC-4下载地址:https://download.vulnhub.com/dc/DC-4.zip kali:192.168.144.148 DC-4:192.168.144.152 二、渗透流程 端口扫描:nmap -T5 -p- -sV -sT -A 192.168.144.1…

OSI模型和网络协议简介

文章目录一、OSI七层模型1.1什么是OSI七层模型?1.2这个网络模型究竟是干什么呢?二、TCP/IP协议三、常见协议四、物联网通信协议以及MQTT4.1 物联网七大通信协议4.2 MQTT特性一、OSI七层模型 1.1什么是OSI七层模型? 我们需要了解互联网的本质…

MySQL进阶篇之MySQL索引

今天主要学习MySQL索引,不过主要是使用Linux系统使用MySQL,主要是先在Linux环境下按照MySQL,然后演示索引的相关操作,介绍了索引的底层结构,索引的分类及语法,索引的性能分析,索引的使用规则&am…

《爆肝整理》保姆级系列教程python接口自动化(二十一)--unittest简介(详解)

简介 前边的随笔主要介绍的requests模块的有关知识个内容,接下来看一下python的单元测试框架unittest。熟悉 或者了解java 的小伙伴应该都清楚常见的单元测试框架 Junit 和 TestNG,这个招聘的需求上也是经常见到的。python 里面也有单元 测试框架-unitt…

数据结构_ 堆结构与堆排序(c++ 实现 + 完整代码 )

堆结构与堆排序 文章目录堆结构与堆排序引入堆堆结构所满足的数学特性准备代码----------- 往堆中插入元素----------- 删除堆顶堆排序构建完整代码及测试动态分配版本非动态版本引入堆 二叉树 具有左孩子与右孩子的最普通的二叉树。 满二叉树 特殊的二叉树:每个节…

HTML课堂笔记

HTML 课堂笔记 文章目录相关概念code我的第一个html页面基本标签相关概念 1、什么是HTML? Hyper Text Markup Language 超文本标记语言 超文本?超级文本,例如流媒体,声音、视频、图片等。 标记语言?这种语言是由大量…

【Git】使用Git上传项目到远程仓库Gitee码云步骤详解

电脑里存放了很多项目,有的备份,有的没备份,如果不仔细分类管理的话,时间一长,到时看到那就会觉得非常杂乱,很难整理,这里有一个叫源代码托管,用过它的都知道,方便管理和…

【7/101】101次面试之测试技术面试题

01、什么是兼容性测试?兼容性测试侧重哪些方面?答:兼容性测试是一种软件测试类型,它的主要目的是确保一个应用程序在不同的操作系统、不同的浏览器、不同的设备、不同的网络环境等各种环境下能够正常运行,并且不会产生…

【并发编程十八】线程局部存储(TLS)

【并发编程十八】线程局部存储(TLS)一、定义二、线程局部存储的实现1、windows系统2、linux系统3、c11三、windows系统1、线程局部存储是分块的(TLS_MINIMUM_AVAILABLE)2、获得索引3、通过索引:存储数据、取出数据4、释放索引和内…

UI自动化测试、接口测试等自动化测试策略

今天跟大家介绍UI测试、接口测试、单元测试主要内容,以及每种测试花费时间讨论。 UI测试【Selenium】 UI测试是最接近软件真实用户使用行为的测试类型。通常是模拟真实用户使用软件的行为,即模拟用户在软件界面上的各种操作,并验证这些操作对…

从0探索NLP——神经网络

从0探索NLP——神经网络 1.前言 一提人工智能,最能想到的就是神经网络,但其实神经网络只是深度学习的主要实现方式。 现在主流的NLP相关任务、模型大都是基于深度学习也就是构建神经网络实现的,所以这里讲解一下神经网络以及简单的神经网络…