一个十进制数字减1后,它的最低位的1位置变为0,下一个位置变为1,所以把它的最低位的1变为0.(比如:数字6的二进制表示是00000110,数字5的二进制表示是00000101,进行一次操作,两个数字按位相与之后就变为00000100,数字6的二进制表示中1的个数就减少一个)
int countOf_1(int num){ int ans = 0; while(num){ num &= num - 1; ans++; } return ans; }
判断一个数是不是2的n次方,即判断一个数的二进制位的最高位是不是1,且只有一个
bool is_2Power(int num){ num &= num - 1; return num == 0; }
int countChange(int n, int m){ return countOf_1(n ^ m);//调用第一个函数 }
pair<int, int> getLimitInt(){ pair<int, int> p; p.first = ~(1 << 31);//int最大值 p.second = 1 << 31;//int最小值 return p; }
判断一个数是否为奇数即判断一个数的二进制表示中最低位是否为1
bool isOdd(int num){ return num & 1 == 1; }
十进制中交换两个数a, b的值可以这样:a = a + b; b = a - b; a = a - b; 类似,二进制中可以用异或操作:a = a ^ b; b = a ^ b; a = a ^ b;
void swap(int a, int b){ a ^= b ^= a ^= b; return ; }
int getAverage(int m, int n){ return (m + n) >> 1; }
int getMthN(int n, int m){ return (n >> (m - 1)) & 1; }
void setMthN_1(int n, int m){ n |= (1 << (m - 1)); return ; }
void setMthN_0(int n, int m){ n &= ~(1 << (m - 1)); return ; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/coder_lau/article/details/47061533