C++位操作的常見用法小結(jié)
本文以實例形式對C++位操作的常見用法進(jìn)行了總結(jié)。分享給大家供大家參考之用。具體方法如下:
在C++中位操作有6種基本操作符,按照優(yōu)先級分別是:
取反 ~
移位 << >>
與 &
異或 ^
或 |
常用的用法有:
1 判斷偶數(shù),判斷最低位是0還是1即可,比求???/p>
x % 2 != 0 //x正負(fù)都可以判斷;不用x%2 == 1,因為如果x為負(fù)奇數(shù),x%2=-1 x & 0x1 == 0
2 交換兩個數(shù),不用中間變量
void mySwap(int &a, int &b)
{
if(a == b) //相等時也能得到正確結(jié)果,但是沒必要了
return;
a ^= b;
b ^= a;
a ^= b;
}
3 求整數(shù)的二進(jìn)制表示中1的個數(shù),不用一個一個的移位判斷
int numOfBit1(int a)
{
int cnt = 0;
while(a != 0)
{
++cnt;
a &= a - 1; //將最右邊的1置為0;正負(fù)都可計算,負(fù)數(shù)是按照補碼計算的,最后的符號位也被統(tǒng)計
}
return cnt;
}
4 正負(fù)轉(zhuǎn)換,不使用正負(fù)號。不管正數(shù)負(fù)數(shù),取反后加1即可
int a = 1; a = ~a + 1; //a變成-1 a = ~a + 1; //a又變成1
5 求絕對值,不判斷正數(shù)負(fù)數(shù),不使用正負(fù)號,返回絕對值
int myAbs(int a)
{
int sign = a >> 31; //如果a為正數(shù),sign為0;否則sign為-1,即0xFFFFFFFF
return (a^sign) - sign; //(a^0)-0 = a, (a^-1)-(-1) = ~a+1 = -a ,a^-1即為a取反
}
希望本文所述對大家C++程序設(shè)計的的學(xué)習(xí)有所幫助。
相關(guān)文章
C語言多種方法實現(xiàn)一個函數(shù)左旋字符串中K個字符
這篇文章主要為大家介紹了C語言多種方法實現(xiàn)一個函數(shù),可以左旋字符串中K個字符,文中附含詳細(xì)的示例講解,有需要的朋友可以借鑒參考下2021-10-10
C/C++ 動態(tài)數(shù)組的創(chuàng)建的實例詳解
這篇文章主要介紹了C/C++ 動態(tài)數(shù)組的創(chuàng)建的實例詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家掌握這樣的功能,需要的朋友可以參考下2017-10-10

