当前位置: 首页 > news >正文

嵌入式系统学习Day16(C语言中的位运算)

位运算
二进制位的运算

嵌入式:
通过位运算 控制 硬件

运算:     
运算规则
&  与    一假则假 
|  或    一真则真
~  非    真假相对 
^  异或   相同为假 不同为真 
<< 左移   表示二进制位的移动 
>> 右移   


eg:

int a = 0x55;
int b = 0x33;


0101 0101  //0x55
&0011 0011  //0x33
---------------------
0001 0001  //0x11
a & b  =>

int a = 0x55;
int b = 0x33;


0101 0101  //0x55
|0011 0011  //0x33
---------------------
0111 0111  //0x77
a | b  =>


取反:

int a = 0x55;

~a 
0101 0101  //0x55
1010 1010  //0xaa

用途:
控制二进制 -- 进而控制硬件 

微控制器:


寄存器

写程序 --- 控制 --- 寄存器的 -- 二进制位 

C 控制硬件 
51 
stm32 
arm系列CPU

与 运算  --- 清零 
或 运算  --- 置1

int a = 0x55;
0101 0101  //0x55
1111 1110
--------------------
0101 0100 //清零 

取反运算 
0101 0101  //0x55
~1  
1111 1110        


<<
eg:
a<<n  

表示,将数值 a 左移 n位 

int a = 1;

3210
0000 0001 //1    0
0000 0010 //2    1
0000 0100 //4    2
0000 1000 //8    3

左移,每左移一位 相当于 乘以 2

1 << 1  



取反运算 
0101 0101  //0x55
1<<4
1
~1
1110 1111
0101 0101  //0x55
----------
0100 0101 // 0101 0101  //0x55
4    5  

int a = 0x55; 
a & ~(1<<4)


置1
int a = 0x55;
0101 0101  //0x55
|         1<<n   
--------------------
0101 0111 //0x57  

    

^  异或   相同为假 不同为真 

//加密
int a = 0x35;

 0011 0101  //0x35
^0000 0110  //0x6
-------------------
0011 0011 //0x33      
0000 0110  //0x6
------------------
0011 0101 //0x35 

 实现两个数交换 

int t  = a;
a = b;
b = t;


//不使用第三方变量 实现两数交换 

a = a + b;
b = a - b;
a = a - b;

a = a ^ b;
b = a ^ b;
a = a ^ b;

a 0011 0101   //0x35
b ^0000 0110  //0x6
---------------------
0011 0011 //0x33  //a 
0000 0110  //0x6  //b
------------------
0011 0101 //0x35  //原来的 a 
0011 0011 //0x33
------------------
0000 0110 //0x6 

注意:
1.浮点数 不能做位运算

 >>
右移

a>>n  //将a向右移动n位 

0000 1000 // 8 
0000 100 0 

最高位 补什么

逻辑右移 区别在于看要移动数据是否有符号 ---默认最高位 补0
算术右移 //有符号 --- 最高位 补 符号位 

0000 1000 //8  //右移 相当于除以 2  
0000 0100 //4
0000 0010 //2 
0000 0001 //1 


http://www.dtcms.com/a/326707.html

相关文章:

  • 绿巨人VS Code多开项目单独管理每个项目单独使用一个不限制的augment
  • 构建AI代理工作流的开源利器——Sim Studio
  • 文件编辑html
  • C语言命令行参数
  • 北京JAVA基础面试30天打卡07
  • 【C++竞赛】核桃CSP-J模拟赛题解
  • 提示词工程实战:用角色扮演让AI输出更专业、更精准的内容
  • vagrant和itamae怎么配合使用? (放弃)
  • 33Nginx模块的从配置与优化
  • 如何使用curl编程来下载文件
  • MacBook 本地化部署 Dify 指南
  • AIDL简单使用
  • 【接口自动化测试】---YAML、JSON Schema
  • 逐际动力开源运控 tron1-rl-isaacgym 解读与改进
  • VMD例程(Matlab 2021b可直接使用)
  • 从“目标烂尾”到“100%交付”:谷歌OKR追踪系统如何用“透明化+强问责”打造职场责任闭环
  • 小白入门指南:Edge SCDN 轻松上手
  • Dify 从入门到精通(第 28/100 篇):Dify 的多租户架构
  • 【学习嵌入式day-21-Linux编程-shell命令】
  • 第九篇:调试工具:Three.js Inspector使用
  • 武汉火影数字|VR大空间是什么?如何打造VR大空间项目
  • 【华为机试】648. 单词替换
  • SciChart图形库应用
  • 专题:2025人形机器人与服务机器人技术及市场报告|附130+份报告PDF汇总下载
  • TCGA数据集下载工具gdc-client下载慢解决方案
  • mysql参数调优之 innodb_buffer_pool_size和innodb_buffer_pool_instances (三)
  • Java AI生成长篇小说的实用
  • VirtualBox虚拟机网卡配置
  • NR,LTE基于CSI的PMI-RI码本选择
  • 【算法训练营Day23】贪心算法part1