運算符

算術運算符:

用於各類數值運算,包括加(+)、減(-)、乘(*)、除(/)、求餘(或稱模運算,%)、自增(++)、自減(- -)

關係運算符:

用於比較運算,包括大於(>)、小於(<)、等於(= =)、 大於等於(>=)、小於等於(<=)和不等於(!=)

邏輯運算符:

 用於邏輯運算,包括與(&&)、或(||)、非(!)
||和&&是我們經常用到的邏輯運算符,與按位運算符|和&是兩碼事。

位操作運算符:

參與運算的量,按二進制位進行運算,包括位與(&)、位或(|)、位非(~)、位異或(^)、左移(<<)、右移(>>)

按位與運算符“&”是雙目運算符。其功能是參與運算的兩個數字對應的二進制位相與。只有對應的兩個二進位均爲1時,結果位才爲1,否則爲0。參與運算的數以補碼方式出現。
例如,9&5可寫算式如下:
00001001(9的二進制補碼)&00000101(5的二進制補碼)
00000001 (1的二進制補碼)
0000 1001
0000 0101
0000 0001 = 1
可見9&5=1。
0xffe56333;
0x0001ffc0;
unsigned int  = 0xffff00ff;
0xffe50033;
 
按位與運算通常用來對某些位清0或保留某些位。例如,把a的高8位清0,保留低8位,可作a&255運算(255的二進制數爲0000000011111111)。
應用:
(1)清0特定位(mask中特定位置0,其他位爲1,s=s&mask)。
(2)取某數中指定位(mask中特定位置1,其他位爲0,s=s&mask)。

按位或運算符“|”是雙目運算符。其功能是參與運算的兩個數字對應的二進制位相或。只要對應的兩個二進位有一個爲1時,結果位就爲1。參與運算的兩個數均以補碼出現。
例如,9|5可寫算式如下:
00001001|00000101
00001101 (十進制爲13)
可見9|5=13
應用:常用來將源操作數某些位置1,其他位不變(mask中特定位置1,其他位爲0,s=s|mask)。

按位異或運算符“^”是雙目運算符,其功能是參與運算的兩個數字對應的二進制位相異或,當兩對應的二進位相異時,結果爲1。參與運算數仍以補碼出現。
例如,9^5可寫成算式如下: 
0001001^00000101 00001100 (十進制爲12)
應用:
(1)使特定位的值取反(mask中特定位置1,其他位爲0,s=s^mask)。
(2)不引入第三變量,交換兩個變量的值(設a=a1,b=b1)。
目  標                       操  作               操作後狀態
a=a1^b1                    a=a^b               a=a1^b1,b=b1
b=a1^b1^b1              b=a^b               a=a1^b1,b=a1
a=b1^a1^a1               a=a^b               a=b1,b=a1

使用位操作可以減少除法和取模的運算。在計算機程序中數據的位是可以操作的最小數據單位,理論上可以用“位運算”來完成所有的運算和操作。一般的位操作是用來控制硬件的,或者進行數據變換,但是,靈活的位操作可以有效地提高程序運行的效率。例如:
//方法G
int I,J;
I = 257 /8;
J = 456 % 32;
 
//方法H
int I,J;
I = 257 >>3;
J = 456 - (456 >> 4 << 4);
 
i++;
i = i + 1;
在字面上好像方法H比方法G麻煩了好多,但是,仔細查看產生的彙編代碼就會明白,方法G調用了基本的取模函數和除法函數,既有函數調用,還有很多彙編代碼和寄存器參與運算;而方法H則僅僅是幾句相關的彙編,代碼更簡潔,效率更高。當然,由於編譯器的不同,可能效率的差距不大,但是,以目前遇到的MS C、ARM C來看,效率的差距還是不小的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章