打印
[应用相关]

C语言中的按位运算符

[复制链接]
902|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 wahahaheihei 于 2020-9-22 14:37 编辑

C中的按位运算符

按位与运算符
C中的按位AND运算符将两个Number用作操作数,并对两个Number的每个位应用按位AND运算,如果两个位均为1,则按位AND的结果为1,或者为0。

具有两个数字的按位与运算的示例。
29 = 00011101
15 = 00001111
00011101
00001111(&)和
——————————-
00001101 = 13
如何检查变量或寄存器中的位设置或未设置
(变量&(1 << X))或(寄存器(1 << X))

if( Var & (1<< 2) == 1)

print(“Bit is Set”);

else

print(“Bit is not Set”);
如何清除变量或寄存器或GPIO中的特定位

寄存器&=〜(1 << X); // X是位置位

举例:
GPIOA&=〜(1 << 2); //清除GPIO PORTA的第二位
按位或运算符
C中的按位或运算符,将两个Number用作操作数,并对两个Number的每个位进行按位OR运算,如果两个位均为0,则按位OR的结果为0,如果两位中的任意一位为1,则结果为1。
具有两个数字的按位或运算的示例。

29 = 00011101
15 = 00001111
00011101
00001111   (|) OR
——————————-
00011111  = 31
如何设置寄存器中的位或变量或数字
寄存器| =(1 << X); // X是寄存器中位的位置,例如GPIOA

GPIOA |= (1<< 5);     // Set 5th bit of GPIO PORTA
按位XOR运算符
C中的按位XOR运算符,将两个Number用作操作数,并对两个Number的每个位进行按位XOR运算,如果两个位都相反,则按位XOR的结果为1,如果两者相同,则结果为0。
具有两个数字的按位XOR操作的示例。
29 = 00011101
15 = 00001111

00011101
00001111(^)XOR
——————————-
00010010 = 18
嵌入式编程中按位XOR运算符的使用
按位运算符用于切换位
寄存器^ =(1 << X)// X是位的位置
GPIOA ^ =(1 << 3); //切换端口A的3号引脚


按位NOT运算符
C中的按位XOR运算符,其一元运算符,它采用单个数字将数字的所有位取反。
例:
29 = 00011101
〜29 = 11100010

左算子
C中的Left运算符将两个Number用作操作数,并将Left中第一个操作数的所有位移位由第二个操作数确定的特定数字。
例:
101 = 01100101
101 << 2 = 10010100
101 << 0 = 01100101
正确的经营者
C中的Left运算符将两个Number用作操作数,并将右边的第一个操作数的所有位移位由第二个操作数确定的特定数。
例:
101 = 01100101
101 >> 2 = 00011001
101 >> 0 = 01100101
使用Shift运算符的算术计算示例。
#include <stdio.h>
int main()
{
int number=256, i;
for (i=0; i<=4; ++i)
printf(“Using Right shift operator by %d position: %d\n”, i, number>>i);

printf(“\n\t”);

for (i=0; i<=4; ++i)
printf(“Using Left shift operator by %d position: %d\n”, i, number<<i);
}
右移运算符用于数字除法。
[数字>>位的位置]      // 2 ^位的位置=除数
右移操作输出
使用0位右移运算符:256
使用1位右移运算符:128
使用2位右移运算符:64
使用3位右移运算符:32

使用4位右移运算符:16
左Shift运算符用于数字乘法。
[Number <<位的位置]     // 2 ^位的位置=乘数
左移操作输出
按0位置
使用左移运算符:256 使用1位置
使用左移运算符:512 使用2位置
使用左移运算符:1024 使用3位置

使用左移运算符:2048


使用特权

评论回复
沙发
lidi911| | 2020-9-22 17:34 | 只看该作者
这个不是ST板块吗?

使用特权

评论回复
板凳
电子xiaocainiao| | 2020-9-22 21:39 | 只看该作者
支持下,左移和右移在做算法的时候,运行速度是很快的。用好这个是很不容易的。

使用特权

评论回复
地板
wanduzi| | 2020-9-22 22:00 | 只看该作者
按位算法非常有用,经常用到。

使用特权

评论回复
5
捉虫天师| | 2020-9-22 22:01 | 只看该作者
我都是写好几个宏使用,很多官方的库函数也用这个。

使用特权

评论回复
6
labasi| | 2020-10-10 12:48 | 只看该作者
支持楼主一下

使用特权

评论回复
7
paotangsan| | 2020-10-10 12:48 | 只看该作者
感谢楼主的分享

使用特权

评论回复
8
renzheshengui| | 2020-10-10 12:50 | 只看该作者
开拓眼界了

使用特权

评论回复
9
wakayi| | 2020-10-10 12:50 | 只看该作者
介绍的很详细

使用特权

评论回复
10
wowu| | 2020-10-10 12:51 | 只看该作者
路过 学习一下

使用特权

评论回复
11
wahahaheihei|  楼主 | 2020-10-10 15:42 | 只看该作者
分享这个是让不会的学会,我看有人发帖提问,里面的代码还直接0x80,0x40这种。。。不如换成BIT3,BIT2

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

215

主题

3026

帖子

12

粉丝