本帖最后由 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
|