整理 c 中的操作符們

2021-06-22 07:34:41 字數 1866 閱讀 2285

舉例:( +、-、*、/、% )

注意要點:

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的高八位清零,保留低八位,...