此文章用于積累bit操作的一些magic方法驾锰, 并不斷更新。
///< 1. 判斷奇偶數(shù)
///< return: true is odd , else even
bool isOdd(int x){
? ? return (x & 1);
}
///< 2.是否為2的指數(shù)
bool isPowerOfTwo(int x){
? ? if((x >> 31)){? ///和0做比較
? ? ? ? return false;
? ? }
? ? return (x & (x - 1)) == 0;
}
///< 3.取余
int remainderNumber(int num, int n){
? ? return num & (n - 1);
}
///< 4.顯示二進制
void showBit(long x){
? ? std::cout << "-----> ";
? ? std::vector<int> tmp;
? ? tmp.reserve(10);
? ? do{
? ? ? ? tmp.push_back(x&1);
? ? ? ? x = x >> 1;
? ? }while(x);
? ? for(int i=tmp.size()-1; i>=0; --i){
? ? ? ? if(remainderNumber(i+1, 4) == 0){
? ? ? ? ? ? std::cout << " ";
? ? ? ? }
? ? ? ? std::cout << tmp[i];
? ? }
? ? std::cout << std::endl;
}
///< 5.兩數(shù)交換
void swap(int &a, int &b){
? ? a ^= b;
? ? b ^= a;
? ? a ^= b;
}
///< 6.兩數(shù)是否異號
bool isOppositeSign(int a, int b){
? ? return (a ^ b) < 0;
}
///< 7.取絕對值
int abs(int a){
? ? if(!(a >> 31)) //正數(shù)
? ? ? ? return a;
? ? return (~a) + 1;
}