平时学习和工作中遇到问题,很难第一时间就想到用位运算符来解决。但是有时使用位运算符会使代码和逻辑异常得简洁。下面会对平时遇到的一些位运算做个汇总记录。龟速更新~
// 将bytes上调至ALIGN(ALIGN为2的指数倍)的倍数
#define ALIGN 8
static int ROUND_UP(int bytes){
return ((bytes + ALIGN - 1) & ~(ALIGN - 1));
}
// 取整数的第一个非零位
static int find_first_noZeorBit(int n){
if (n == 0)
return 0;
return n & (~(n - 1));
}
// 找二进制中1的个数
int find_oneNum(x)
{
int countx = 0;
while(x) {
countx ++;
x = x&(x-1);
}
return countx;
}
// 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
int singleNumber(vector<int>& nums) {
return accumulate(nums.begin(), nums.end(),0,bit_xor<int>());
}