運算符編程
在應用程序中,常常會對數據進行運算,爲此,C語言提供了多種類型的運算符,即專門用於告訴程序執行特定運算或邏輯操做的符號。根據運算符的做用,能夠將 C語言中常見的運算符分爲下圖中的六大類。數組
算術運算符工具
在數學運算中最多見的就是加減乘除四則運算。C語言中的算術運算符就是用來處理四則運算的符號,這是最簡單、最經常使用的運算符號。表 2-11列出了 C語言中的算術運算符及其用法。學習
算術運算符看上去都比較簡單,也很容易理解,但在實際使用時還有不少須要注意的問題,具體以下:開發工具
一、進行四則混合運算時,運算順序遵循數學中「先乘除後加減」的原則。設計
二、在進行自增(++)和自減(--)的運算時,若是運算符(++或--)放在blog
操做數的前面則是先進行自增或自減運算,再進行其餘運算。反之,若是運算符放在操做數的後面則是先進行其餘運算再進行自增或自減運算。開發
請仔細閱讀下面的代碼塊,思考運行的結果。數學
int num1 = 1; int num2 = 2;io
int res = num1 + num2++;
printf("num2=%d" + num2);
printf("res=%d" + res);
上面的代碼塊運行結果爲:num2=3,res=3,
具體分析以下:
第一步:運算 mum1+mun2++的結果,此時變量 mun1,mum2的值不變。
第二步:將第一步的運算結果賦值給變量 res,此時 res值爲 3。
第三步:mum2進行自增,此時其值爲 3。
三、在進行除法運算時,當除數和被除數都爲整數時,獲得的結果也是一個整數。若是除法運算有浮點數參與運算,系統會將整數數據隱形類型轉換爲浮點類型,最終獲得的結果會是一個浮點數。
例如, 2510/1000 屬於整數之間相除,會忽略小數部分,獲得的結果是 2,而 2.5 / 10 的實際結果爲 0.25。
請思考一下下面表達式的結果:
3500/1000*1000
所得結果爲3000。因爲表達式的執行順序是從左到右,因此先執行除法運算 3500 / 1000,獲得結果爲 3,而後再乘以 1000,最終獲得的結果就是 3000。
四、取餘運算在程序設計中都有着普遍的應用,例如判斷奇偶數的方法就是求一個數字除以 2 的餘數是1 仍是 0。在進行取餘運算時,運算結果的正負取決於被餘數(%左邊的數)的符號,與餘數(%右邊的數)的符號無關。
如:(-5)%3=-2,而 5%(-3)=2。
賦值運算符
賦值運算符的做用就是將常量、變量或表達式的值賦給某一個變量。下表中列舉了 C語言中的賦值運算符及其用法。
在這個表中, 「 = 」 的做用不是表示相等關係,而是賦值運算符,即將等號右側的值賦給等號左側的變量。在賦值運算符的使用中,須要注意如下幾個問題:
一、在 C 語言中能夠經過一條賦值語句對多個變量進行賦值,具體示例以下:
int x, y, z;
x = y = z = 5; //爲三個變量同時賦值
在上述代碼中,一條賦值語句能夠同時爲變量 x、y、z賦值,這是因爲賦值運算符的結合性爲「從右向左」,即先將 5賦值給變量 z,而後再把變量 z的值賦值給變量 y,最後把變量 y的值賦值變量 x,表達式賦值完成。
須要注意的是,下面的這種寫法在 C語言中是不可取的。
小編推薦一個學C語言/C++的學習裙【 七一二,二八四,七零五 】,不管你是大牛仍是小白,是想轉行仍是想入行均可以來了解一塊兒進步一塊兒學習!裙內有開發工具,不少乾貨和技術資料分享!
intx = y = z = 5;//這樣寫是錯誤的
二、在該表中,除了 「 = 」,其餘的都是特殊的賦值運算符,接下來以「+=」爲例,學習特殊賦值運算符的用法,示例代碼以下:
int x=2;
x+=3;
上述代碼中,執行代碼 x += 3後,x的值爲 5。這是由於在表達式 x+=3中的執行過程爲:
(1)將 x的值和 3的執行相加。
(2)將相加的結果賦值給變量 x。
因此,表達式 x=+3就至關於 x = x + 3,先進行相加運算,在進行賦值。-=、*=、/=、%=賦值運算符均可依此類推。
比較運算符
比較運算符有哪些呢?
大小比較: > < >= <=
相等比較: == != === !==
比較運算符返回類型
「 比較運算符返回類型是:Boolean類型」
比較運算符優先級
「 算術運算符的優先級高於比較運算符」
邏輯運算符
在高中數學中,咱們就學過邏輯運算,例如p爲真命題,q爲假命題,那麼「p且q」爲假,「p或q」爲真,「非q」爲真。在C語言中,也有相似的邏輯運算:
邏輯運算的結果
在編程中,咱們通常將零值稱爲「假」,將非零值稱爲「真」。邏輯運算的結果也只有「真」和「假」,「真」對應的值爲 1,「假」對應的值爲 0。
1) 與運算(& &)
參與運算的兩個表達式都爲真時,結果才爲真,不然爲假。例如:
5&&05爲真,0爲假,相與的結果爲假,也就是 0。
(5>0) && (4>2)5>0 的結果是1,爲真,4>2結果是1,也爲真,因此相與的結果爲真,也就是1。
2) 或運算(||)
參與運算的兩個表達式只要有一個爲真,結果就爲真;兩個表達式都爲假時結果才爲假。例如:
10 || 010爲真,0爲假,相或的結果爲真,也就是 1。
(5>0) || (5>8)5>0 的結果是1,爲真,5>8 的結果是0,爲假,因此相或的結果爲真,也就是1。
3) 非運算(!)
參與運算的表達式爲真時,結果爲假;參與運算的表達式爲假時,結果爲真。例如:
!00 爲假,非運算的結果爲真,也就是 1。
!(5>0)5>0 的結果是1,爲真,非運算的結果爲假,也就是 0。
輸出邏輯運算的結果:
#include
int main(){
int a = 0, b = 10, c = -6;
int result_1 = a&&b, result_2 = c||0;
printf("%d, %d ", result_1, !c);
printf("%d, %d ", 9&&0, result_2);
printf("%d, %d ", b||100, 0&&0);
return 0;
}
運行結果:
優先級
邏輯運算符和其它運算符優先級從低到高依次爲:
賦值運算符(=) < &&和|| < 關係運算符 < 算術運算符 < 非(!)
&& 和 || 低於關係運算符,! 高於算術運算符。
按照運算符的優先順序能夠得出:
a>b && c>d 等價於 (a>b)&&(c>d)
!b==c||d
a+b>c&&x+yc)&&((x+y)、
另外,邏輯表達式也能夠嵌套使用,例如a>b && b || 9>c,a || c>d && !p。
位運算符
提及位運算符就有點意思了,你們都知道在編程的世界中,本質上的存儲都是以進制的形式存在,都是1和0。
sizeof運算符
sizeof 是 C 語言的一種單目操做符,如 C 語言中其餘操做符 ++ 、-- 等,sizeof 操做符以字節形式給出了其操做數的存儲大小。操做數能夠是一個表達式或括號內的類型名。操做數的存儲大小由操做數的類型決定 。
在C語言中,一個char類型的變量佔用一個字節的存儲空間,那int類型與float類型呢?這能夠經過使用sizeof運算符來測量。
使用sizeof運算符時,須要提供變量或類型參數(若是是表達式,則按表達式結果的類型計算),返回該變量或類型以byte爲單位所佔用的空間大小。
若是是實參是類型,那麼sizeof獲得的結果是此類型的大小;
如是實參是變量,那麼sizeof獲得的結果是此變量的類型的大小,這個值永遠會比0大。
sizeof 的使用方法:
sizeof(類型說明符,數組名或表達式); 或 sizeof 變量名