Arduino-运算符-系列4

  • 内容
  • 评论
  • 相关

前面我们陆续介绍了Arduino的程序结构、数据类型、常量和变量,本章介绍Arduino的运算符,运算符是一个特定的符号,它告诉计算机执行特定的数学或逻辑运算。在C语言中内置了丰富的运算符,包含以下类型:

  1. 算术运算符
  2. 关系运算符
  3. 逻辑运算符
  4. 位运算符
  5. 混合运算符
4x4矩阵键盘单片机

算术运算符

算术运算符也就是常见的加减乘除、赋值运算和模数运算,详细了解一下,我们先假设变量A的值是10,变量B的值是20:

  1. 赋值运算符:“ = ”,表示将等号右边的值存储在等号左边的变量中。如:A=B。这里注意不能理解为等于符号。
  2. 加法运算符:“ + ”,表示两个操作数相加。如:A+B,将会得到30。
  3. 减法运算符:“ - ”,表示两个操作数相减。如:A-B,将会得到-10。
  4. 乘法运算符:“ * ”,表示两个操作数相乘。如:A*B,将会得到200。
  5. 除法运算符:“ / ”,表示两个操作数相除。如:B/A,将会得到2。
  6. 模数运算符:“ % ”,表示求整数除法中的余数。如:B%A,将得到0。

再看一个实际例子:

void loop () {
   int a = 9,b = 4,c;
   c = a + b;
   c = a - b;
   c = a * b;
   c = a / b;
   c = a % b;
}
/*代码将输出:*/
a + b = 13
a - b = 5
a * b = 36
a / b = 2 //不计余数,取整数商;
a % b = 1 //余数是1;

关系运算符

关系运算符在C语言中主要起判断的作用。同样的,我们先假设变量A的值是10,变量B的值是20:

  1. 等于:“ == ” ,判断两个操作数的值是否相等,如果是,则条件为真。如:A == B,结果不为真,会返回 false;
  2. 不等于:“ != ”,判断两个操作数的值是否相等,如果值不相等,则条件为真。如:A != B,结果为真,会返回 true;
  3. 小于:“ < ”,判断符号左边操作数的值是否小于右边操作数的值,如果是,则条件为真。如A < B,结果为真,会返回 true;
  4. 大于:“ > ”,判断符号左边操作数的值是否大于右边操作数的值,如果是,则条件为真。如A > B,结果不为真,会返回 false;
  5. 小于等于 :“ <= ”,判断符号左边操作数的值是否小于或等于右边操作数的值,如果是,则条件为真。如A <= B,结果为真,会返回 true;
  6. 大于等于:“ >= ”, 判断符号左边操作数的值是否大于或等于右边操作数的值,如果是,则条件为真。 如A >= B,结果不为真,会返回 false;

看实际例子:

void loop () { 
   int a = 9,b = 4
   bool c = false;
   if(a == b)
      c = true;
   else
      c = false;

   if(a != b)
      c = true;
   else
      c = false;
   
   if(a < b)
      c = true;
   else
      c = false;
   
   if(a > b)
      c = true;
   else
      c = false;
   
   if(a <= b)
      c = true;
   else
      c = false;
   
   if(a >= b)
      c = true;
   else
      c = false;
}

输出结果如下:

c = false
c = true
c = false
c = true
c = false
c = false

逻辑运算符

同样的,我们先通过假设变量A的值是10,变量B的值是20:

  1. 逻辑与‘and’:“ && ”,如果两个操作数都非零,则条件为真。如:A && B,结果为真;
  2. 逻辑或‘or’:“ || ”,如果两个操作数中有一个非零,则条件为真。如:A || B,结果也为真;
  3. 逻辑非‘not’:“ ! ”,用于反转操作数的逻辑状态。如操作数的逻辑状态条件为真,则逻辑非的结果为假。如:!(A&&B),因为A && B,结果为真,则逻辑非结果为假。

看一下实际例子:

void loop () {
   int a = 9,b = 4
   bool c = false;
   if((a > b)&& (b < a))
      c = true;
   else
      c = false;

   if((a == b)|| (b < a))
      c = true;
   else
      c = false;

   if( !(a == b)&& (b < a))
      c = true;
   else
      c = false;
}

输出:

c = true
c = true
c = true

位运算符

Arduino中的位运算符包括:按位与(&)、按位或(|)、按位异或(^)、取反(~),它们的运算对象都必须为整数,而且除了取反运算符,其余三种均为双目运算符(见文末注解)。当然Arduino中还包括左移运算符(<<)和右移运算符(>> )。老惯例,假设变量A的值是60(二进制0011 1100),变量B的值是13(二进制0000 1101):

  1. 按位与(&):让参与运算的两个数相对应的二进制位相与。规则:只有对应的两个二进制位都为1时,结果位才为1;只要有一个二进制位为0,结果位就为0。如A&B,A对应二进制为 0011 1100 ;B对应二进制为 0000 1101 ,结果为12,对应二进制运算结果为 0000 1100。
  2. 按位或(|):让参与运算的两个数相对应的的二进制位相或。规则:只有对应的两个二进制位都为0时,结果位才为0;只要有一个二进制位为1,结果位就为1。如:A|B,结果对应的二进制位为 0011 1101,结果为61;
  3. 按位异或(^):让参与运算的两个数相对应的的二进制位相异或。规则:当对应的两个二进制位相同(都为1或都为0)时,结果位为0;当对应的两个二进制位相异时,结果位为1。如A^B,结果对应的二进制位为00110001,结果为49;
  4. 取反(~):用于求整数的二进制反码。规则:二进制位为1的取反后变为0,二进制位为0的取反后变为1。如:~A,结果二进制为1100 0011;
  5. 左移运算符(<<):规则:左操作数值由右操作数指定的位数向左移动,左边“抛弃”,右边补0。如:(A << 2)结果为 240, 二进制为 1111 0000;
  6. 右移运算符(>> ):左操作数值按右操作数指定的位数右移,左边用0填充,右边丢弃。如:(A >> 2) 结果为 15, 二进制为 0000 1111。

看一些实际例子:

void loop () {
   int a = 60,b = 13
   int c = 0;
   c = a & b ;
   c = a | b ;
   c = a ^ b ;
   c = a ~ b ;
   c = a << b ;
   c = a >> b ; 
}

输出:

c = 12
c = 61
c = 49
c = -60
c = 240
c = 15

混合运算符

我们还是以实际例子来帮助理解,假设变量A的值是10,变量B的值是20:

  1. “++”:增量运算符,将整数值增加1。如:A++,结果为11;
  2. “--”: 递减运算符,使整数值减少1 。如:A--,结果为9;
  3. “+=”:将右操作数添加到左操作数并将结果分配给左操作数。如:B += A,等价于B = B+ A;
  4. “-=”:将左操作数减去右操作数并将结果赋给左操作数。如:B -= A等价于B = B - A;
  5. “*=”:将右操作数与左操作数相乘,并将结果赋给左操作数。如:B*= A等价于B = B*A;
  6. “/=”:将左操作数与右操作数分开,并将结果分配给左操作数。如:B /= A等价于B = B / A;
  7. “%=”:对两个操作数取模,并将结果赋给左操作数。如:B %= A等价于B = B % A。

看实际例子:

void loop () {
   int a = 10,b = 20
   int c = 0;
   
   a++;
   a--;
   b += a;
   b -= a;
   b *= a;
   b /= a;
   a %= b;
   a |= b;
   a &= b;
}

输出为:

a = 11
a = 9
b = 30
b = 10
b = 200
b = 2
a = 0
a = 0
a = 30

注解

单目运算符:只对一个变量进行操作。如:a++;
双目运算符:对两个变量进行操作。如:a=1; b=3; c=a+b;就是双目运算符;
多目运算符:对三个变量进行操作。如:int a = boolean ? b : c; 。