在Arduino编程中,有多种类型的运算符用于制造不同的条件。这些条件然后调节旨在执行特定任务的代码的流程。Arduino编程中使用的最重要的运算符类型之一是位操作符,在这篇文章中,将简要解释位操作符及其类型。
位操作符
位运算符用于将小数转换为二进制,然后将这些运算符逐位应用于该数字的二进制上,从而在小数上应用布尔运算符。为了说明问题,我们取了两个小数12和13,如果这两个数字都转换为二进制,其值就分别为(1100)和(1101)。
基本上有六个位运算符被使用,它们是
- 和
- 或
- 非
- XOR
- 左移
- 右移
位数与运算符
第一个比特运算符是AND运算符,只有当两个输入都是1或真时,才会有输出1。使用比特运算的符号是"&"。为了进一步理解,AND运算分别适用于12和13的二进制值。该操作逐位应用于数字的二进制,如12的第一位是1,与13的第一位也是1,所以操作的结果是1,以此类推,所以这个AND操作的结果是(1100),如果我们把它转换成十进制,就是12。
| 十进制 | 12 | 13 |
| 二进制 | 1100 | 1101 |
| 运营商 | (12&13) | |
| 结果 | (1100) | |
| 二进制转十进制 | 12 |
位数OR运算法则
第二个运算符是OR,当二进制数字只有一个输入为1时,输出为1,所以我们可以说,只有当两个输入都为0时,OR运算的输出才是0。用于OR运算的符号是"|"。为了进一步理解OR的操作,我们可以在12和13的二进制中应用这个OR运算。
OR运算符在12和13的二进制中逐位应用,比如13的第一位是1,12的第一位也是1,所以输出也是1,其余位的运算也是一样的。结果是(1101),然后转换为十进制,即13
| 十进制 | 12 | 13 |
| 二进制 | 1100 | 1101 |
| 运营商 | (12 | 13) | |
| 结果 | (1101) | |
| 二进制转十进制 | 13 |
位数NOT运算法则
与其他运算符不同,NOT运算符只有一个输入和输出,它将输入倒置。用来表示NOT运算符的符号是"~"。这里我们将使用一个十进制的二进制。例如,如果我们取13的二进制数,即(1101),经过运算器OR的操作后,将得到(0010),即2的小数。
| 小数 | 13 |
| 二进制 | 1101 |
| 操作符 | (~13) |
| 结果 | (0010) |
| 二进制转十进制 | 2 |
位数XOR运算法则
这个位操作被称为排他性OR,它与普通OR操作的唯一区别是,当两个输入都是1时,其输出将是0。在Arduino编程中,为了表示或使用这个操作,使用的符号是"^"。如果对二进制数为(1100)和(1101)的数字12和13应用这个操作,那么位智XOR操作的结果是(0001),这个二进制数的十进制是1。
| 十进制 | 12 | 13 |
| 二进制 | 1100 | 1101 |
| 运营商 | (12 ^ 13) | |
| 结果 | (0001) | |
| 二进制转十进制 | 1 |
位的左移和右移
一个数字的二进制位的移位可以用移位运算符来完成;移位运算符又分为两种,取决于要移位的那一边。要在右边进行移位,所用的公式是**(a/(2^b))**。
同样地,要在左边进行移位,所用的公式是**(a\*(2^b)**)。这里a 是要移位的数字**,2** 是比特数,b是给该数字移位的比特数。左移的表示方法是**(<<c**),右移的表示方法是**(>>c**),这里c 是数字要移位的位数,例如,如果我们在左边移位12位,在右边移位2位,那么左移的结果是48,右移的结果是3。
| 小数 | 12 | 12 |
| 二进制 | 1100 | 1100 |
| 运营商 | 12 <<2 | 12>>2 |
| 结果 | 110000 | 11 |
| 二进制转十进制 | 48 | 3 |
为了让大家清楚地了解这些运算符的功能,我们编译了所有位智运算符的Arduino程序。
int a =12;
int b=13;
int c; // for storing the result
void setup() { // put your setup code here, to run once:
Serial.begin(9600);//initializing serial communication
Serial.print("AND :");
c=a & b;
Serial.println(c);
Serial.print("OR:");
c=a|b;
Serial.println(c);
Serial.print("XOR:");
c=a^b;
Serial.println(c);
Serial.print("NOT:");
c=~a;
Serial.println(c);
Serial.print("Left Shift:");
c=12<<2;
Serial.println(c);
Serial.print("Right Shift:");
c=12>>2;
Serial.println(c);
}
void loop() {
// put your main code here, to run repeatedly:
}

输出

总结
为了对两个数字逐位进行逻辑运算,使用了位操作符,这些操作符有助于使用于执行特定任务的条件。这篇文章用例子简要地解释了每种类型的位运算符,并给出了这些运算符的清晰概念,还给出了一个简单的Arduino代码。