前面我們陸續(xù)介紹了Arduino的程序結構、數據類型、常量和變量,本章介紹Arduino的運算符,運算符是一個特定的符號,它告訴計算機執(zhí)行特定的數學或邏輯運算。在C語言中內置了豐富的運算符,包含以下類型:
- 算術運算符
- 關系運算符
- 邏輯運算符
- 位運算符
- 混合運算符
算術運算符
算術運算符也就是常見的加減乘除、賦值運算和模數運算,詳細了解一下,我們先假設變量A的值是10,變量B的值是20:
- 賦值運算符:“ = ”,表示將等號右邊的值存儲在等號左邊的變量中。如:A=B。這里注意不能理解為等于符號。
- 加法運算符:“ + ”,表示兩個操作數相加。如:A+B,將會得到30。
- 減法運算符:“ – ”,表示兩個操作數相減。如:A-B,將會得到-10。
- 乘法運算符:“ * ”,表示兩個操作數相乘。如:A*B,將會得到200。
- 除法運算符:“ / ”,表示兩個操作數相除。如:B/A,將會得到2。
- 模數運算符:“ % ”,表示求整數除法中的余數。如: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:
- 等于:“ == ” ,判斷兩個操作數的值是否相等,如果是,則條件為真。如:A == B,結果不為真,會返回 false;
- 不等于:“ != ”,判斷兩個操作數的值是否相等,如果值不相等,則條件為真。如:A != B,結果為真,會返回 true;
- 小于:“ < ”,判斷符號左邊操作數的值是否小于右邊操作數的值,如果是,則條件為真。如A < B,結果為真,會返回 true;
- 大于:“ > ”,判斷符號左邊操作數的值是否大于右邊操作數的值,如果是,則條件為真。如A > B,結果不為真,會返回 false;
- 小于等于 :“ <= ”,判斷符號左邊操作數的值是否小于或等于右邊操作數的值,如果是,則條件為真。如A <= B,結果為真,會返回 true;
- 大于等于:“ >= ”, 判斷符號左邊操作數的值是否大于或等于右邊操作數的值,如果是,則條件為真。 如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:
- 邏輯與‘and’:“ && ”,如果兩個操作數都非零,則條件為真。如:A && B,結果為真;
- 邏輯或‘or’:“ || ”,如果兩個操作數中有一個非零,則條件為真。如:A || B,結果也為真;
- 邏輯非‘not’:“ ! ”,用于反轉操作數的邏輯狀態(tài)。如操作數的邏輯狀態(tài)條件為真,則邏輯非的結果為假。如:!(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):
- 按位與(&):讓參與運算的兩個數相對應的二進制位相與。規(guī)則:只有對應的兩個二進制位都為1時,結果位才為1;只要有一個二進制位為0,結果位就為0。如A&B,A對應二進制為 0011 1100 ;B對應二進制為 0000 1101 ,結果為12,對應二進制運算結果為 0000 1100。
- 按位或(|):讓參與運算的兩個數相對應的的二進制位相或。規(guī)則:只有對應的兩個二進制位都為0時,結果位才為0;只要有一個二進制位為1,結果位就為1。如:A|B,結果對應的二進制位為 0011 1101,結果為61;
- 按位異或(^):讓參與運算的兩個數相對應的的二進制位相異或。規(guī)則:當對應的兩個二進制位相同(都為1或都為0)時,結果位為0;當對應的兩個二進制位相異時,結果位為1。如A^B,結果對應的二進制位為00110001,結果為49;
- 取反(~):用于求整數的二進制反碼。規(guī)則:二進制位為1的取反后變?yōu)椋埃M制位為0的取反后變?yōu)椋薄H纾簙A,結果二進制為1100 0011;
- 左移運算符(<<):規(guī)則:左操作數值由右操作數指定的位數向左移動,左邊“拋棄”,右邊補0。如:(A << 2)結果為 240, 二進制為 1111 0000;
- 右移運算符(>> ):左操作數值按右操作數指定的位數右移,左邊用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。如:A++,結果為11;
- “–”: 遞減運算符,使整數值減少1 。如:A–,結果為9;
- “+=”:將右操作數添加到左操作數并將結果分配給左操作數。如:B += A,等價于B = B+ A;
- “-=”:將左操作數減去右操作數并將結果賦給左操作數。如:B -= A等價于B = B – A;
- “*=”:將右操作數與左操作數相乘,并將結果賦給左操作數。如:B*= A等價于B = B*A;
- “/=”:將左操作數與右操作數分開,并將結果分配給左操作數。如:B /= A等價于B = B / A;
- “%=”:對兩個操作數取模,并將結果賦給左操作數。如: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; 。


返回頂部
刷新頁面
下到頁底