運算符的概念以及分類
本小節知識點:
- 【瞭解】運算符基本概念
- 【理解】運算符分類
1.運算符基本概念
- 運算符是告訴編譯程序執行特定算術或邏輯操作的符號。
- 例如告訴程序, 某兩個數相加, 相減等
2.運算符分類
-
按照功能劃分:
- 算術運算符
- 關係運算符與邏輯運算符
- 按位運算符
-
運算符根據參與運算的操作數的個數分爲
- 單目運算
- 單目運算:只有一個操作數 如 : i++ ! sizeof
- 雙目運算
- 雙目運算:有兩個操作數 如 : a+b
- 三目運算
- 三目預算:C語言中唯一的一個,也稱爲問號表達式 a>b ? 1 : 0
- 單目運算
運算符的優先級以及結合性
本小節知識點:
- 【理解】優先級
- 【理解】結合性
1.優先級
- C語言中,運算符的運算優先級共分爲15 級。1 級最高,15 級最低。 在表達式中,優先級較高的先於優先級較低的進行運算。而在一個運算量兩側的運算符優先級相同時,則按運算符的 結合性所規定的結合方向處理。
江哥提示:一般情況下不需要死記硬背優先級, 只需要記住()優先級最高即可
2.結合性
-
C語言中各運算符的結合性分爲兩種,即左結合性(自左至右)和右結合性(自右至左)。
-
算術運算符的結合性是自左至右,即先左後右。
例如表達式: x-y+z 則y 應先與“-”號結合,執行 x-y 運算,然後再執行+z 的運算。這種自左至右的結合 方向就稱爲“左結合性”。
-
而自右至左 的結合方向稱爲“右結合性”。
最典型的右結合 性運算符是賦值運算符例如:如x=y=z 由於“=”的 右結合性,應先執行y=z 再執行x=(y=z)運算。
-
算術運算符
本小節知識點:
- 【理解】算術運算符
- 【掌握】結合性和優先級
- 【掌握】算術運算的注意點
1.算術運算符
名稱 | 符號 | 說明 |
---|---|---|
加法運算符 | + | 雙目運算符,即應有兩個量參與加法運算。如a+b,4+8等。具有左結合性。 |
減法運算符 | - | 雙目運算符。但“-”也可作負值運算符,此時爲單目運算,如-x,-5等具有左結合 性。 |
乘法運算符 | * | 雙目運算符,具有左結合性。 |
除法運算符 | / | 雙目運算符,具有左結合性。參與運算量均爲整型時,結果也爲整型,捨去小數。如果運算量中有一個是實型,則結果爲雙精度實型 |
求餘運算符 (模運算符) | % | 雙目運算符,具有左結合性。要求參與運算的量均爲整型,不能應用於float或double 類型。求餘運算的結果等於兩數相除後的餘數,整除時結果爲0。 |
- 整數除於整數,求出來的結果依然是整數
- 浮點型賦值給整型會損失小數部分
- %兩側必須都爲整數
- 利用%求出來的餘數是正數還是負數,由%左邊的被除數決定,被除數是正數,餘數就是正數,反之則反
2.結合性和優先級
- 結合性:從左到右
- 優先級:
- * / % 優先級 大於 + -
- 優先級相同則左結合計算
3*5/3+18 先算3*5 然後再算除3 最後結果再+18
3.算術運算的注意點
-
1.自動類型轉換
int a = 10.6; int b = 10.5 + 1.7;
-
2.自動將大類型轉換爲了小類型,會丟失精度 自動類型提升
int b = 10.5 + 10;
-
3.將右邊的1提升爲了double類型
double b = 1.0 / 2; 解決除法的精度問題
-
4.強制類型轉換
double a = (double)1 / 2; double b = (double)(1 / 2);// 錯誤寫法
求餘運算符
- 【理解】求餘運算注意事項
1.求餘運算注意事項
- 參與運算的必須是整數
10 % 2 = 0
因爲 10 可以被2整除, 沒有餘數
10 % 3 = 1
因爲 10除以3餘1, 所以結果爲1
- 錯誤寫法
12.3 % 3
- 注意
-
m%n 求餘,相當於m/n 獲取餘數
- (1)n等於0 無意義
- (2)m等於0 結果爲0
- (3)m>n 正常求餘 如:8 % 3 = 2
- (4)m<n 結果是m 如:2 % 4 = 2 1 % 4 = 1 3 % 8=3
-
運算結果的正負性取決於第一個運算數,跟後面的運算數無關
10 % 3 = 1 -10 % 3 = -1 10 % -3 = 1
類型轉換問題
本小節知識點:
- 【掌握】算術運算中的類型轉換
1.類型轉換問題
- 類型轉換分爲:
- 隱式數據類型轉換
- 顯示數據類型轉換
- 自動轉換(隱式轉換):
- 自動轉換髮生在不同數據類型的量混合運算時,由編譯系統自動完成。
- 自動轉換遵循以下規則:
- 相同數據類型的值才能進行運算(比如加法運算),而且運算結果依然是同一種數據類型。系統會自動對佔用內存較少的類型做一個“自動類型提升”的操作
- 若參與運算量的類型不同,則先轉換成同一類型,然後進行運算。
- 轉換按數據長度增加的方向進行,以保證精度不降低。如int型和long型運算時,先把int量轉 成long型後再進行運算。
- 所有的浮點運算都是以雙精度進行的,即使僅含float單精度量運算的表達式,也要先轉換成 double型,再作運算。
- char型和short型參與運算時,必須先轉換成int型。
- 在賦值運算中,賦值號兩邊量的數據類型不同時,賦值號右邊量的類型將轉換爲左邊量的類型。如果右邊量的數據類型長度比左邊長時,將丟失一部分數據,這樣會降低精度,丟失的部分 按四捨五入向前舍入。
double
↑
long
↑
unsigned
↑
int
↑
char|short
例如:
int i = 1;
i = i + 8.808
printf("%d", i);
輸出結果: 9
按照隱式處理方式,在處理i = i + 8.808時
首先i轉換爲double型,然後進行相加,結果爲double 型,再將double型轉換爲整型賦給i
- 強制類型轉換(顯示轉換):
- 強制類型轉換是通過類型轉換運算來實現的
- 其一般形式爲:(類型說明符) (表達式)
(float) a; /* 把a轉換爲實型 */ (int)(x+y); /* 把x+y的結果轉換爲整型 */
- 其一般形式爲:(類型說明符) (表達式)
int i = 1;
i = i + (int)8.808
printf("%d", i);
輸出結果: 9
這時直接將8.808轉換成整型,然後與i相加,再把結果賦給i。
其實: 這樣可把二次轉換簡化爲一次轉換。
int i = 1;
i = (int)(i + 8.808)
printf("%d", i);
或者讓系統隱式轉換
int i = 1;
i = i + 8.808
printf("%d", i);
- 強制類型轉換注意點
- 將大範圍的數據賦值給小範圍變量時,系統會自動做一個強制類型轉換的操作,這樣容易丟失精度
- 類型說明符和表達式都必須加括號(單個變量可以不加括號),如把(int)(x+y)寫成(int)x+y則成了把x轉換成int型之後再與y相加了。
- 無論是強制轉換或是自動轉換,都只是爲了本次運算的需要而對變量的數據長度進行的臨時性轉換,而不改變數據說明時對該變量定義的類型。
float floatValue = 10.1f;
int sum = 4 + (int)floatValue ;
printf("sum = %d", sum);// 輸出14
// floatValue本身的值並沒有改變
printf("floatValue = %f", floatValue); // 輸出10.100000
賦值運算符
本小節知識點:
- 【掌握】賦值運算符
- 【理解】賦值表達式及賦值語句
1.賦值運算符
+ 簡單賦值運算符: =
+ 複合賦值運算符: +=、-=、*=、/=、%=
2.賦值表達式
-
什麼是表達式?
- 將同類型的數據(如常量、變量、函數等),用運算符號按一定的規則連接起來的、有意義 的式子稱爲表達式。
- 例如:算術表達式、邏輯表達式、字符表達式等。
-
表達式的特點:
- 表達式是一個意義的式子,所以一定有返回值
- 賦值表達式
- 由“=”連接的式子稱爲賦值表達式。
- 例如: x = a + b;
- 等號=左邊只能是變量,不能是常量,下面的寫法是錯誤的:10 = 10 + 5;
- 例如: x = a + b;
- 凡是表達式可以出現的地方均可出現賦值表達式
- 由“=”連接的式子稱爲賦值表達式。
- 賦值運算符的結合性
- 賦值運算符具有右結合性, 而且優先級比算術運算符低
- 例如: int a = 3 + 5; 會先計算3 + 5, 然後再把結果賦值給a
- 例如: int a = b = c = 5; 右結合性可理解爲a=(b=(c=5))
- 賦值運算符具有右結合性, 而且優先級比算術運算符低
複合運算符
本小節知識點:
- 【理解】複合賦值運算符
1.複合賦值運算符
- 在賦值符“=”之前加上其它二目運算符可構成複合賦值符。
- /= 除後賦值 變量/=表達式 如:a/=3;即a=a/3
- *= 乘後賦值 變量*=表達式 如:a*=3;即a=a*3
- %= 取模後賦值 變量%=表達式 如:a%=3;即a=a%3
- += 加後賦值 變量+=表達式 如:a+=3;即a=a+3
- -= 減後賦值 變量-=表達式 如:a-=3;即a=a-3
構成複合賦值表達式的一般形式爲: 變量 雙目運算符 = 表達式; 如: a *= 1 + 2; 它等效於 變量 = 變量 雙目運算符 表達式; 如: a = (1 + 2) * a;
- 注意:賦值運算符優先級排名14位,僅僅高於“,”運算符。
自增運算符
本小節知識點:
- 【瞭解】自增、自減運算符介紹
- 【掌握】自增、自減運算符求值過程
- 【瞭解】練習
1.自增、自減運算符介紹
- 在程序設計中,經常遇到“i=i+1”和“i=i-1”這兩種極爲常用的操作。C語言爲這種操作