c語言的運算範圍很寬,把除了控制語句和輸入/輸出以外的幾乎所有的基本操作都作為運算子處理。運算子主要分為三大類:算術運算子、關係邏輯運算子、按位運算子。根據運算子的運算物件的個數,c語言的運算子又可分成單目運算子、雙目運算子、三目運算子。運算子具體分類情況如下表所示:
c語言運算子
分類名稱
運算子算術運算子
+、-、*、/、%
關係運算子
、<=、>=、==、!=
邏輯運算子
&&、||、!
自增自減運算子
++、--
位運算子
<>、~、|、^、&
賦值運算子
=、+=、-=、*=、/=
條件運算子
?:逗號運算子
,指標運算子
*、&求位元組數運算子
sizeof
強制型別轉換運算子
()分量運算子
.、->
下標運算子
其他{}
c語言中各種運算子的結合性分成左結合性(自左至右)和右結合性(自右至左)兩種。
例如,算數運算子是左結合性,即先左後右的。如:
x-y-z; /* 先執行x-y的操作,再執行-z的操作 */
賦值運算子是右結合性,即先右後左的。如:
x=y=z; /* 先執行y=z的操作,再執行x=的操作 */
一般而言,多數運算子具有左結合性,單目運算子、三目運算子、賦值運算子具有右結合性。使用運算子將常量、變數、函式連線在一起,就構成了表示式。
結合上文的運算子,對某些表示式進行講解:
printf("%d\n", 10 % 3); /* 1 */
printf("%d\n", -10 % 3); /* -1 */
printf("%d\n", 10 % -3); /* 1 */
printf("%d\n", -10 % -3); /* -1 */
++i:i自增1後再參與其他運算;
--i:i自減1後再參與其他運算;
i++:i參與其他運算後,i的值再自增1;
i--:i參與其他運算後,i的值再自減1。例如:
int i = 10;
printf("%d\n", ++i); /* 11 */
printf("%d\n", --i); /* 10 */
printf("%d\n", i++); /* 10 */
printf("%d\n", i--); /* 11 */
自增自減運算子在使用時,需要注意一下幾點:
運算子的操作物件只能是變數,而不能是常量或者表示式;
運算子的優先順序高於基本算數運算子,結合性是右結合性(自右向左)。例如:
int i = 5, j = 5, p, q;
p = (i++) + (i++) + (i++);
q = (++j) + (++j) + (++j);
printf("%d,%d,%d,%d", p, q, i, j); /* 15,24,8,8 */
int x, a, b;
x = (a = 3) + (b = 4);
printf("%d", x); /* 7 */
上述語句是合法的。當然,在c語言中也可以組成賦值語句。按照c語言規定,任何表示式在其末尾新增分號就構成語句。
在賦值表示式中,如果賦值運算子兩邊的資料型別不相同,系統將自動進行型別轉換,即將賦值運算子右邊的型別換成左邊的型別。具體規定如下:
實數賦予整數,捨去小數部分;
整數賦予實數,數值不變,但將以浮點形式存放,即增加小數部分(小數部分位0);
字元賦予整數,由於字元是1個位元組,整數(int)4個位元組,故將字元的ascii碼放到整數的最低8位;整數賦予字元,只將最低8位賦予字元。
如果表示式中同時出現了算術運算子、關係運算子、賦值運算子等,它們的優先順序由高到低,順序如下:
!——算術運算子——關係運算子——&&和||——賦值運算子
也就是說,邏輯運算子!和&&、||的優先順序順序不同,這裡需要注意。
int a = 2, b = 4, c = 6, x, y;
y = (x = a + b), (b + c);
printf("%d,%d", y, x); /* 6,6 */
在這個例子中,由於賦值運算子的優先順序較高,也就是:(y = (x = a + b)) , (b + c) ,x=6,y=6;而整個逗號表示式的值是10,但是並沒有什麼用處(沒有把結果賦值給某個變數)。通常,逗號表示式是分別求各表示式的值,而並不一定要求整個逗號表示式的值。
利用異或運算交換兩個數:
a = a^b;
b = b^a;
a = a^b;
語句是構成程式的基本部分,程式是一系列帶有標點的語句集合。在c語言中,這個標點就是分號「;」。
結合上文,對語句進行部分講解:
int a = b = c = d = 1; /* 錯誤使用 */
int a,b,c,d;
a = b = c = d = 1; /* 正確使用 */
程式的流程有順序結構、選擇結構和迴圈結構3種。由於這部分知識比較簡單,只對其中的某些點進行提及就可以了,就不面面俱到了。
switch (變數)
關於switch結構的說明如下:
switch (x)
表示x的值無論是1還是2,都會執行printf("hello!")這條語句。
c語言中還有一種可以使程式執行過程中跳轉到指定位置的結構,將其稱為跳轉結構。跳轉結構一般在程式中與迴圈結構或分支結構配合使用,所以也可以認為是為了配合其他結構的。
c語言中提供了3種實現跳轉結構的語句:break語句、continue語句、goto語句。
goto 語句標號;
其中,語句標號是乙個有效的識別符號,它的命名規則與變數名的命名規則相同。語句標號加上乙個「:」一起出現在程式的某處,執行goto語句後,程式將跳轉到該標號處並執行其後的語句。例如:
loop_1 : printf("goto語句跳轉到此標號");
goto語句的主要應用:
goto語句的使用注意點:
運算子及流程控制
運算子 c語言提供一種操作的符號來計算 運算子表示式 由運算元和運算子組成的表示式 表示式結果 計算的結果 1 算術運算子 算數運算子表示式 算術結果 2 賦值運算子 左值 右值 左值必須有變數 1 溢位 大空間賦值給小空間 short in 2 不轉換型別 int float 只會整數間的賦值 f...
運算子和流程控制
python3中只有乙個input python2中的raw input與python3中的input一模一樣 python3中的input 要求輸入者必須輸入乙個明確的資料型別 輸入什麼型別就存成什麼型別 1.運算子 算術運算 int,float 數字型別 取整 取餘賦值運算子 age 18 ag...
運算子和流程控制
目錄算數運算子 取餘 自加1 自減1需要注意的是 var a 10 var b a 先賦值再自加 console.log b 10 console.log a 11 var c b 先自加再賦值 console.log b 11 console.log c 11比較運算子 全等 不全等1 1 fal...