位元運算是指按二進位進行的運算。在程式中,常常需要處理二進位位的問題。C/C++語言提供了6個位操作運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long類型。
在實際應用中,建議用unsigned整型運算元,因為帶符號運算元可能因為不同機器結果不同。
c++和c的位操作運算子完全相同,但c++中增加了bitset標準庫來支援位集操作,具體內容請參考http://book.51cto.com/art/200809/88698.htm或者http://book.csdn.net/bookfiles/17/1001760.shtml,這些連結都是《C++ Primer中文版》中的內容,大家也可以直接看書。
下面是C/C++位操作運算子列表,其中運算子優先順序為從上到下遞減,但<<,>>優先順序相同。
C/C++位操作運算子
| 操作符 |
功能 |
用法 |
| ~ |
位求反 |
~expr |
| << |
左移 |
expr1 << expr2 |
| >> |
右移 |
expr1 >> expr2 |
| & |
位與 |
expr1 & expr2 |
| ^ |
位異或 |
expr1 ^ expr2 |
| | |
位或 |
expr1 | expr2 |
程式碼範例如下:
代碼
1 #include<iostream>
2 using namespace std;
3 int main(){
4 unsigned short x=3,y=5;
5 cout<<"~x="<<(unsigned short)~x<<endl;//位求反
6 cout<<"~x="<<~x<<endl;//位求反
7 cout<<"x&y="<<(x&y)<<endl;//位與
8 cout<<"x^y="<<(x^y)<<endl;//位異或
9 cout<<"x|y="<<(x|y)<<endl;//位或
10 cout<<"x<<1="<<(x<<1)<<endl;//位左移
11 cout<<"y>>1="<<(y>>1)<<endl;//位右移
12 return 0;
13 }
運算結果如下:
~x=65532
~x=-4
x&y=1
x^y=6
x|y=7
x<<1=6
y>>1=2
代碼解釋如下:
short為16位整數,故x,y的二進位表示如下:
x=3(00000000 00000011)
y=5(00000000 00000101)
~ 00000000 00000011
= 11111111 11111100(65532或者-4)(至於為什麼同樣的二進位位表示的數不一樣,這與電腦的數值表示有關,具體原因可搜尋“補碼”)
00000000 00000011
& 00000000 00000101
= 00000000 00000001(1)
00000000 00000011
^ 00000000 00000101
= 00000000 00000110(6)
00000000 00000011
| 00000000 00000101
= 00000000 00000111(7)
00000000 00000011<<1
= 00000000 00000110(6)
00000000 00000101>>1
= 00000000 00000010(2)
&= ^= |= 這三個運算子就是跟+=差不多, A &= B 就是A先和B與,然後再賦給A。