C語言操作符學習總結
c語言中關於操作符部分的學習,可以主要分為兩個部分:操作符和表示式。
這裡首先是列舉各種操作符,在C語言中,一般主要的操作符有這麼幾種:算數操作符,移位操作符,位操作符,賦值操作符,單目運算子,關係操作符,邏輯操作符,條件操作符,逗號表示式以及比較特殊的幾個操作符。
算數操作符
算數操作符,主要是:+ , -, *, /, %
這些都是比較常見的,不光是在C語言中學習到,事實上從小我們學習數學都常用到他們,所以這裡沒什麼多說的,就是有幾點注意事項:
- 除了取模運算,也就是取餘數的%操作符,其他的幾個操作符都是可以用於整數運算和浮點數運算的;
- %取模運算在這裡特殊的在於,符號兩邊的運算元都必須是整數;
- /操作符,還是與數學上一樣,注意第二個運算元不是0就行,這裡如果兩個運算元都是整數,就按整數除法運算;而只要其中不管哪個運算元為浮點數,就按照浮點數除法運算。
移位操作符
移位操作符,分別是左移操作符 << 和右移操作符 >> ,(PS:移位操作,是特別針對二進位制序列進行的操作)
左移操作的 移位規則:
將所有有效位整體向左移動,具體移動多少位是自己決定的,並拋棄左邊最高位,並在右邊空出來的位置補0
右移操作的 移位規則:
則是拋棄將所有有效位整體向右移動,並且擠掉最低有效位,並在空出來的最高位補0
至於有符號數的符號位是否影響移位運算,這裡不細說。後面再詳細討論。
位操作符
位操作符有:&,|, ^,作用分別是:
所謂按位與,就是同一位上相同取1,相異為0;而按位或,是有一個1就是取1,兩個都是0,則取0;而按位與或,則是同一位相異取1,相同取0
賦值操作符
= 是用來進行賦值的
這裡要注意這個等號在C語言裡不是等號的意思,它是給變數寫入一個值。而等於在C語言裡,我們是用==來定義的。而事實上,將=與==混用,是我們學習程式設計初期,比較常犯的一個錯誤。然而,有時候,你在程式裡把他們混用了,編譯時,卻沒有報錯,但在程式執行時卻會發生不可預知的錯誤。
相應的對賦值操作,為了簡化程式碼,將賦值與其他操作進行結合,就有了複合賦值符的概念:+=,-=, *=, /=, %= , <<=, >>=,&=,|=,^=。
都是將符合賦值的左右操作符進行相應的操作,並將結果覆蓋性的重新賦給左運算元。
單目運算子
這裡就是要注意,將取地址操作與按位與進行區分。區分的辦法也不難,就是取地址,它是對一個變數進行取地址,所以只是操作符右邊有運算元;而與運算,是兩個運算元之間的,所以,與操作符兩邊都會有運算元。
並且,要注意前置++,前置--,是先進行運算再使用資料;而後置++,後置--,則是先使用資料,在進行運算。
關係操作符
所謂關係操作,就是進行判定,兩個運算元,或兩個表示式的結果,或者運算元與表示式之間的關係。沒有什麼多說的,只要注意,向上面一樣,區分=與==的區別就行。
邏輯操作符
邏輯與,邏輯或的部分,需要區分他們與按位與,按位或的差別。以及他們自己的特點:邏輯操作表示式中的短路現象這麼一個,比較特別的情況。
逗號表示式
exp1,exp2,exp3,...expN
逗號表示式這裡,是把多個表示式放在一起,使用逗號進行分隔。逗號表示式從左向右依次序執行,但整個表示式的結果一般是最後一個表示式影響的,是最後一個表示式的結果
條件操作符
條件操作符的一個典型應用就是三目運算子,比如我們進行比較大小的:
return (1>2)?1:0
特殊的幾個操作符
另外還可以列舉的幾個特殊的操作符有:
1.下標引用操作符[ ]
下標引用操作符一般是用於陣列元素的訪問:array[index],這個array就是陣列名,而這個索引值index就是指的陣列元素的位置,而陣列元素的儲存的位置,從0到n-1。
2.函式呼叫操作符()
對於函式呼叫操作符,()裡面的一般是傳遞給函式的引數,當然函式裡可以不對資料進行操作,那麼這時就可以不往裡面傳引數了
3.訪問結構體成員的. 和訪問結構體指標的->
對於結構體這塊,有:結構體變數.成員名 結構體指標->成員名
其實對結構體指標,也可以用*(結構體指標).成員名,但是這樣一般會引起歧義,因而使用了指向操作符->來代替。