首页 > 其他分享 >单片机各种位运算总结

单片机各种位运算总结

时间:2024-03-19 13:55:58浏览次数:22  
标签:总结 运算 0011 取反 单片机 按位 清零 某位

单片机各种位运算总结

当在单片机中需要进行寄存器操作或者读取/发送数据时,可能用到位操作,因此在此做一个总结,将可能用到的位操作进行一个总结并解析。

位运算具体的计算方式:【STM32】位操作、按位与、按位或、按位异或、取反、左移、右移等基础 C 语言知识补充_按位与操作是什么意思-CSDN博客

  • 对某位清零(按位与 &)
 //定义一个变量 a = 1001 1111 b (二进制数)
 unsigned char a = 0x9f;

 //对 bit2 清零
 a &= ~(1<<2);

 //上面一行代码右边括号中的1左移两位,(1<<2)得二进制数:0000 0100 b(这个便是位2的掩码)
 //然后按位取反,~(1<<2)得 1111 1011 b
 //假如a中原来的值为二进制数: a = 1001 1111 b
 //所得的数与a作“位与&”运算: a = (1001 1111 b) & (1111 1011 b)
 //经过运算后,a的值 a=1001 1011 b
 //这样,a的 bit2 位就被清零,而其它位不变。
  • 连续几个位清零(按位与 &)
 //同样我们首先定义一个变量 a = 1001 1111 b (二进制数)
 unsigned char a = 0x9f;

  //若把a中的二进制位分成2个一组
 //即 bit0、bit1为第0组,bit2、bit3为第1组,
 //   bit4、bit5为第2组,bit6、bit7为第3组
 //现在,我们要对第1组的bit2、bit3清零

 a &= ~(3<<2*1);

 //括号中的3左移两位,(3<<2*1)得二进制数:0000 1100 b(这个是位3、位2的掩码)
 //然后按位取反,~(3<<2*1)得 1111 0011 b
 //假如a中原来的值为二进制数: a = 1001 1111 b
 //所得的数与a作”位与&”运算: a = (1001 1111 b) & (1111 0011 b)
 //经过运算后,a的值 a=1001 0011 b
 //最后 a的第1组的bit2、bit3就被清零了,而其它位不变。

 //上述 (~(3<<2*1)) 中的 1 即为组编号; 如清零第3组bit6、bit7此处应为3,即要左移6位
 //括号中的 2 为每组的位数,每组有2个二进制位; 若分成4个一组,此处即为 4
 //括号中的 3 是组内所有位都为1时的值; 若分成4个一组,此处即为二进制数“1111 b”

 //例如对第2组bit4、bit5清零,3就要左移4位
 a &= ~(3<<2*2);
  • 对某位赋值(按位或 |)
/* 对某位赋值 */

//假设 a = 1000 0011 b
a |= (1<<4);
//此时对变量 a 的 bit4 置1
//置1后,即 a = 1001 0011 b
  • 对某几位赋值(按位或 |)
 //假设 a = 1000 0011 b
 a |= (1<<2*2);
 //此时对清零后的第2组bit4、bit5设置成二进制数“01 b ”(也就是“01 b”左移4位)
 //即 a = 1001 0011 b,成功设置了第2组的值,其它组不变
  • 对某位取反(按位异或 ^)
 //a = 1001 0011 b
 //把bit6取反,其它位不变

 a ^=(1<<6);
 //a = 1101 0011 b

标签:总结,运算,0011,取反,单片机,按位,清零,某位
From: https://www.cnblogs.com/hnu-hua/p/18082600

相关文章

  • Java基础知识总结(下)
    本文部分内容节选自JavaGuide,地址:https://javaguide.cn/java/basis/java-basic-questions-03.html......
  • 关于四则运算的一些
    表达式树假设E表示有一个运算符(+-*/)的表达式,I表示一个整数或分数那这个表达式肯定有左操作数和右操作数,左右操作数本身可能是E或者I那么最终的表达式可以表示成一颗表达式树,就像:通过一定方式,生成一个随机的表达式树,我们就可以从根表达式中获得一个随机的表达式。大概......
  • 0098-基于单片机的洗衣机仿真设计
    功能描述1、采用51/52单片机作为主控芯片;2、采用数码管显示计时秒数,单个操作均为20秒;3、采用继电器控制进水、排水;4、采用L298驱动电机;5、具有强洗、标准洗、弱洗、甩干四种模式;6、强洗流程:进水、三轮洗涤、排水、甩干、进水、漂洗、排水、甩干;7、标准洗流程:进水、两轮......
  • 692、基于51单片机的自行车(调速,LCD1602)
    毕设帮助、开题指导、技术解答(有偿)见文末。目录一、设计功能二、proteus仿真三、原理图四、程序源码五、资料包括一、设计功能自行车调速系统1、使用LCD1602显示当前速度和设置速度2、使用电位器设置当前速度,模拟把手调速3、按键启停系统4、速度控制......
  • 693、基于51单片机的RGB调色(PWM)
    毕设帮助、开题指导、技术解答(有偿)见文末。目录一、设计功能二、proteus仿真三、原理图四、程序源码五、资料包括一、设计功能采用PWM调制方式进行三基色LED配色控制的研究,实验证明其电路简单、操作方便,能很好的实现各种颜色的配置和切换使用6个按键分别......
  • 694、基于51单片机的报警器(模拟量,上限,TLC1543,LCD1602)
    毕设帮助、开题指导、技术解答(有偿)见文末。目录一、设计功能二、proteus仿真三、原理图四、程序源码五、资料包括一、设计功能简易报警器(可用作CO2、CH4、CO、粉尘、酒精、NH2等模拟量传感器报警)1、测量物理量的浓度值2、如果浓度值超过阀值,报警。3、......
  • 688、基于51单片机的智能婴儿车(温湿度,音乐,避障,声音)
    毕设帮助、开题指导、技术解答(有偿)见文末。目录一、设计功能二、proteus仿真三、原理图四、程序源码五、资料包括一、设计功能二、proteus仿真三、原理图四、程序源码五、资料包括需要完整的资料可以点击下面的名片,找我要资源......
  • 端口渗透思路总结
    文件共享服务端口端口号端口说明使用说明21、22、69FTP/TFTP文件传输协议允许匿名的上传、下载、爆破和嗅探操作2049NTS服务爆破、未授权访问、远程代码执行139LDAP目录访问协议注入、允许匿名访问、弱口令远程连接服务端口端口号端口说明使用......
  • MySQL系列:索引失效场景总结
    相关文章数据库系列:MySQL慢查询分析和性能优化数据库系列:MySQL索引优化总结(综合版)数据库系列:高并发下的数据字段变更数据库系列:覆盖索引和规避回表数据库系列:数据库高可用及无损扩容数据库系列:使用高区分度索引列提升性能数据库系列:前缀索引和索引长度的取舍数据库系列:My......
  • 重载自增++运算符预算符完成数组扩容
    今天突发奇想,我们平时的++运算符基本都只能自增数字,那我能不能实现一个当用户自增数组时也能完成数组增加一项呢(假设你不会使用c++的变长数组或者vector!)下面就是我的实现方法,各位大佬多多指教哦!比如说gyf大佬和yzs大佬以及lxb大佬?//重载++运算符扩容数组#include<......