《C语言学习:位运算》17

写在前面:本笔记为个人学习各平台C语言系列课程所作,仅供交流学习,不得作他用。

1. 按位运算

(1)按位与&

应用一:想让哪一位取0就让该位为0、其余为1的数相与。

应用二:一个数可能有多段字节,让不想保留的部分为0想保留部分为F即可保留一段。

(2)按位或|

应用一:想让哪一位取1就让该位为1、其余为0的数相或。

应用二:想把两段拼起来,就把他们或运算。

(3)按位取反~

(4)逻辑运算VS按位运算

(5)按位异或^

可以用异或做一种简单加密:异或一次产生密文,再异或一次相同代码产生明文。

2. 移位运算

(1)左移

注意:**左移不是循环左移!!!**这种左移把数字挪出去后右边补零。

(2)右移

右移要保持正负不变。最左边为1的话,保持最高位为1,再把1往右移。

往左移不用管符号位,正负变也不要紧。往右移要考虑符号位。

(3)注意

**移位的数不能用负数!**不是说<<-2就是>>2,没这回事!!!

3. 位运算举例

(1)输出一个数的二进制

相当于每一位都单独和1做一下取与,如果结果非0直接输出1,结果全0输出0,从而输出二进制。

(2)单片机特殊寄存器SFR

SBS是100,PE是1000,先把SBS和PE取或得到1100,再把得到的U去和SBS或PE做其他操作,可以使相应位清零。(目标:使特定位上的比特为0)

4. 位段

上述单片机那种操作只能控制一位比特,怎么控制多位?

这个机构里,每个成员后的冒号和数字表示这个成员占几个比特。这样可以实现每一段分别表示单片机里一些段的0或1。

一个例子:

主函数里prtBin(*(int*)&uu)表示取uu这个定义结构的地址,然后强制转换为一种int类型的地址,再把这个地址上的值用二进制输出。这一段操作是为了得到uu整体字段,然后根据定义的区间进行判断结构里每个成员的值。

位段的特点:

相关推荐
汉克老师几秒前
GESP2026年9月认证C++七级( 第三部分编程题(2、括号序列))精讲
c++·gesp·小学生·学c++编程
@codercjw6 分钟前
企业实战电机和传感器选型
学习
吠品12 分钟前
GitHub 周榜拆解:决策小模型扎堆上位
c语言·开发语言·算法
见叶之秋38 分钟前
C++ 泛型世界的两块拼图:容器适配器与仿函数
java·开发语言
VIP_CQCRE40 分钟前
在 Visual Studio 里接入 Ace Data Cloud:让 LMLocal 调用 OpenAI 兼容模型
openai·ai编程·开发工具·visual studio·ace data cloud
zhangrelay1 小时前
用ROS2Lyrical实验报告册思路重做蓝桥云课ROS1实验并改进
linux·笔记·学习·ubuntu·机器人
逗脑IDE1 小时前
零基础学ESP32:RFID无线射频卡——让ESP32拥有“刷卡“能力!
开发语言·网络·人工智能·python·esp32·硬件开发
小师兄吃牛肉1 小时前
C语言篇:内联函数
c语言·开发语言
yuniko-n1 小时前
【Java】字符串相关坑点
java·开发语言·python
m4Rk_1 小时前
【论文阅读】Agent 记忆机制(91):THEANINE——不删除过时记忆,让 Agent 记住事情是如何变化的
论文阅读·人工智能·学习·开源·github