位運算之 C 與或非異或


View Code
位運算比較易混:

位運算之 C 與或非異或  

與運算:&
兩者都為1為1,否則為0
1&1=1,  1&0=0,  0&1=0,  0&0=0

或運算:|
兩者都為0為0,否則為1
1|1 = 1,  1|0 = 1,  0|1 = 1, 0|0 = 0

非運算:~
1取0,0取1
~1 = 0, ~0 = 1
~(10001) = 01110

異或運算:^
兩者相等為0,不等為1(易混淆)
1^1=0, 1^0=1, 0^1=1, 0^0=0

位移操作符:<<與>>
位運算是指按二進制進行的運算。在程序中,常常需要處理二進制位的問題。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 代碼示例如下: [cpp] view plaincopy #include<iostream> using namespace std; int main(){ unsigned short x=3,y=5; cout<<"~x="<<(unsigned short)~x<<endl;//位求反 cout<<"~x="<<~x<<endl;//位求反 cout<<"x&y="<<(x&y)<<endl;//位與 cout<<"x^y="<<(x^y)<<endl;//位異或 cout<<"x|y="<<(x|y)<<endl;//位或 cout<<"x<<1="<<(x<<1)<<endl;//位左移 cout<<"y>>1="<<(y>>1)<<endl;//位右移 return 0; } [cpp] view plain copy #include<iostream> using namespace std; int main(){ unsigned short x=3,y=5; cout<<"~x="<<(unsigned short)~x<<endl;//位求反 cout<<"~x="<<~x<<endl;//位求反 cout<<"x&y="<<(x&y)<<endl;//位與 cout<<"x^y="<<(x^y)<<endl;//位異或 cout<<"x|y="<<(x|y)<<endl;//位或 cout<<"x<<1="<<(x<<1)<<endl;//位左移 cout<<"y>>1="<<(y>>1)<<endl;//位右移 return 0; } 運算結果如下: ~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) 實例參考:位運算符(一):C/C++位運算符 - jason的專欄 - 博客頻道 - CSDN.NET http://blog.csdn.net/jason314/article/details/5719933

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM