学习Arduino的位运算符

403 阅读4分钟

在Arduino编程中,有多种类型的运算符用于制造不同的条件。这些条件然后调节旨在执行特定任务的代码的流程。Arduino编程中使用的最重要的运算符类型之一是位操作符,在这篇文章中,将简要解释位操作符及其类型。

位操作符

位运算符用于将小数转换为二进制,然后将这些运算符逐位应用于该数字的二进制上,从而在小数上应用布尔运算符。为了说明问题,我们取了两个小数12和13,如果这两个数字都转换为二进制,其值就分别为(1100)和(1101)。

基本上有六个位运算符被使用,它们是

  • XOR
  • 左移
  • 右移

位数与运算符

第一个比特运算符是AND运算符,只有当两个输入都是1或真时,才会有输出1。使用比特运算的符号是"&"。为了进一步理解,AND运算分别适用于12和13的二进制值。该操作逐位应用于数字的二进制,如12的第一位是1,与13的第一位也是1,所以操作的结果是1,以此类推,所以这个AND操作的结果是(1100),如果我们把它转换成十进制,就是12。

十进制1213
二进制11001101
运营商(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

十进制1213
二进制11001101
运营商(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。

十进制1213
二进制11001101
运营商(12 ^ 13)
结果(0001)
二进制转十进制1

位的左移和右移

一个数字的二进制位的移位可以用移位运算符来完成;移位运算符又分为两种,取决于要移位的那一边。要在右边进行移位,所用的公式是**(a/(2^b))**。

同样地,要在左边进行移位,所用的公式是**(a\*(2^b)**)。这里a 是要移位的数字**,2** 是比特数,b是给该数字移位的比特数。左移的表示方法是**(<<c**),右移的表示方法是**(>>c**),这里c 是数字要移位的位数,例如,如果我们在左边移位12位,在右边移位2位,那么左移的结果是48,右移的结果是3。

小数1212
二进制11001100
运营商12 <<212>>2
结果11000011
二进制转十进制483

为了让大家清楚地了解这些运算符的功能,我们编译了所有位智运算符的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代码。