C語言中操作符總結(下)
阿新 • • 發佈:2018-12-19
- 邏輯操作符 常見的邏輯操作符: 邏輯與( && )、 邏輯或( || ) 邏輯操作運算中不看二進位制位,只看真假。 使用規則: 邏輯與( && ):操作符作用的兩個運算元全為 真 時結果為 “ 1 ” ,其他情況結果都為 “ 0 ”。 邏輯或( || ):操作符作用的兩個運算元全為 假 時結果為 “ 0 ”,其他情況結果都為 “ 1 ”。 在實際生活中的應用:判斷閏年等。
// 輸出1000-2000 年之間的閏年 #include<stdio.h> int main() { int count = 0; int year = 0; for (year = 1000; year <= 2000; year++) { // 判斷閏年條件(能被 4 整除但不能被 100 整除,或者能被 400 整除) if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) { printf("%d ", year); // 輸出閏年 count++; // 計數 } } printf("\ncount = %d\n", count); // 輸出1000-2000 年之間的閏年個數 system("pause"); return 0; }
特別注意1: 邏輯與 和 按位與,邏輯或 和 按位或 的區別。 如: 特別注意2: 邏輯與 和 邏輯或 的特點
//邏輯與
#include<stdio.h>
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ && ++b && d++;
printf(" a = %d\n b = %d\n c = %d\n d = %d\n", a, b, c, d);
system("pause");
return 0;
}
// 程式輸出的結果是什麼?
首先來分析一下這段程式碼:這裡的i = a++ && ++b && d++;
a++ && ++b
,如果a++ && ++b
結果為真,繼續向後執行;否則程式碼只執行到判斷為假的那步,之後的程式碼一律不執行。
這裡由於 a 的初值等於 0,為假,所以程式碼執行到這裡就不再繼續向後執行,最終結果為:a = 0 , b = 2 , c = 3 , d = 4。
//邏輯或 #include<stdio.h> int main() { int i = 0, a = 0, b = 2, c = 3, d = 4; i = a++ || ++b || d++; printf(" a = %d\n b = %d\n c = %d\n d = %d\n", a, b, c, d); system("pause"); return 0; } // 程式輸出的結果是什麼?
首先來分析一下這段程式碼:這裡的i = a++ && ++b && d++;
是用兩個“ || ”連線,邏輯或的特點就是它的兩個運算元都為 假 時結果才為假,所以程式碼在執行在執行的過程中無論“ || ”的兩個運算元是否為真都會一直執行,直到最後一個程式碼之前的程式碼全部執行完才會判斷,如果前邊所有程式碼的執行結果為真,那麼最後一個程式碼就不再執行,否則執行最後一個程式碼。
這裡在執行i = a++ || ++b || d++;
時,先執行a++ || ++b
由於 b 的初值為 2,所以 ++b 的結果為真,即:a++ || ++b
的結果為真,所以 d++
就不再執行。最終結果為:a = 1 , b = 3 , c = 3 , d = 4。
- 條件操作符 exp1 ? exp2 : exp3 運算規則: 如果 exp1 為真,則結果為 exp2 ,否則結果為 exp3。 如:
#include<stdio.h>
int main()
{
int a = 10;
int b = 0;
if (a > 5) {
b = 3;
}
else{
b = -3;
}
printf("b = %d\n", b);
system("pause");
return 0;
}
將上面程式碼轉換為條件表示式:
#include<stdio.h>
int main()
{
int a = 10;
int b = 0;
(a > 5) ? (b = 3) : (b = -3);
printf("b = %d\n", b);
system("pause");
return 0;
}
例:使用條件表示式實現找兩個數中的較大值。
#include<stdio.h>
int main()
{
int a = 3;
int b = 9;
int max = 0;
max = (a > b) ? a : b;
printf("max = %d\n", max);
system("pause");
return 0;
}
- 逗號表示式 exp1, exp2, exp3, … expN 逗號表示式就是用逗號隔開的多個表示式。 運算規則: 逗號表示式,從左向右依次執行,整個表示式的結果是 最後一個表示式 的結果。
#include<stdio.h>
int main()
{
int a = 1;
int b = 2;
int c = (a > b, a = b + 10, a, b = a + 1); // 逗號表示式
printf("c = %d\n", c);
system("pause");
return 0;
}
// c 的結果是多少?
- 下標引用操作符 [ ] 運算元:一個數組名 + 一個索引值
int arr[4] = { 5,3,4,1 }; // 這裡的[ ] 不是下標引用操作符
arr[2] = 4; // 這個 [ ] 才是下表引用操作符,arr 表示陣列首元素地址
// [ ] 的兩個運算元是 arr 和 2
// arr 表示陣列首元素地址,[2]表示陣列第三個元素
- 函式呼叫操作符 ( ) 接受一個或多個運算元:第一個運算元是函式名,剩餘的運算元都是傳遞給函式的引數。
#include<stdio.h>
//定義函式
int Add(int x, int y)
{
return x + y;
}
int main()
{
int a = 10;
int b = 5;
Add(a, b); // 呼叫函式,這裡的()就是函式引用操作符
// 接收了三個運算元:Add、a、b
system("pause");
return 0;
}
- 結構體成員 .結構體.成員名 結構體物件訪問自己的成員。 ->結構體指標 ->成員名 結構體指標訪問它指向物件的成員。