舉例:( +、-、*、/、% )
注意要點:
a、 優先性和結合性。 如 a * b + c * d ,結合時從左向右,先和乘除結合,再和加法結合。 ( a * b ) + ( c * d )
b、在 / 和 % 操作中,倘若僅有乙個運算元為負值 ,則返回結果依賴機器型別
舉例: !、 < 、 == 、 && 等。返回值為bool型別
注意點:
a、 && ,|| 操作符,自左向右結合,僅當由左運算元無法確定表示式結果時,才會接著計算右運算元的值
比如
class toybear;
toybear winne;
if( ( winne.color != brown ) && ( winne.size != xx ) )
倘若 winne.color 為 brown。則左運算元值為 false , 表示式「 ( winne.color != brown ) && ( winne.size != xx ) 」 的值確定為false 。不再計算右操作符的值,表示式直接返回false
b、關係表示式不應串接
如 i < j < k 雖然想表達 "( i < j ) && ( j < k ) " ,但實際上表達的是 ( i < j ) < k
具體來說,關係表示式返回bool型別,所以此表示式為 ( true / false ) < k
只要 k 大於左操作符,表示式為true
但這並非我們想看到的結果。
所以,請不要使用 「 i < j < k 」這樣的串接
沒什麼要特別注意的地方
前自增操作符和後自增操作符的區別
1、前者將修改後的值作為結果返回,後者將修改前的值作為結果返回
2、從編譯角度來說,前置操作只要加一後返回加一的結果,後者需要儲存運算元原先的值。後者需要更多的額外工作
用於訪問類型別物件的成員
前者適用於類型別的迭代器,後者適用於類型別本身
例如vector< string > vec;
vector< string >::iterator iter = vec.begin() ;
則iter -> empty();
和( *iter ).empty();
等價形式為:cond ? expr1 : expr2 ; 可視作 if () else() 的一種變形
常用在函式的返回值中。
用於獲取物件或者型別名的長度。
例如class gun{
int wt;
int size;
int branch;
gun rifle;
sizeof ( gun )
sizeof ( rifle )
都是合法的表示式
注意點:
陣列名可以代表整個陣列,也可以作為指向陣列中第乙個元素的指標。
例如 int n_array[ 10 ];
sizeof( n_array ) / sizeof( *n_array )
sizeof( n_array ) 的n_array是陣列名,表示式結果為陣列所佔的儲存空間的位元組數
sizeof( *n_array ) 的結果是 n_array 指向的物件( 陣列中的第乙個元素 ) 所佔儲存空間的位元組數
所以表示式的結果為陣列中所含的元素數目
說明:expr1 , expr2 ,expr3 …………;
表示式從左向右執行,返回值為最右表示式的值。
常見於for( ) 迴圈, 其他場景中較為少見。
C 中的操作符
c 的精彩世界還離不開其提供的豐富的操作符,按照運算元的個數,c 操作符可分為以下幾類 如果從操作符的作用來看,c 操作符可以分為賦值操作符,算術操作符,關係操作符,邏輯操作符,位操作符和其它操作符。1.賦值操作符 賦值操作符除基本的賦值操作符 之外還包括以下的組合賦值操作符 要注意的是,對於復合的...
C 中的操作符
本想部落格以每週一篇的速度更新,卻未曾料到最近幾周忙到了沒有時間坐下來寫點東西的程度。而這一篇,也因為寫得較為匆忙,望您指出疏漏之處。至於本文參考,可能部分來自於ec中的某個條款,並適當地加以補充。在c 中,為基本型別定義操作符是最常見的任務。例如為乙個自定義型別提供比較操作符,以允許其作為stl容...
c語言操作符 位操作符 移位操作符
1 按位操作符 1.1 按位 與 雙目運算子 僅當兩個運算元都為1時,結果為1,否則為0。參與運算的數以補碼方式出現。例 9 5 1 0000 1001 9的補碼 0000 0101 5的補碼 0000 0001 1的補碼 應用 a 通常將某些位清零或保留某些位。例如 將a的高八位清零,保留低八位,...