位运算小技巧总结(更新中)

想到哪写到哪

交换两个数字

void swap(int & a, int & b){
    a ^= b;
    b ^= a;
    a ^= b;
}

判断奇偶

if(1 == (n & 1))    // 奇数
if(0 == (n & 1))    // 偶数

 

乘以二和除以二

n << 1 // 乘以二
n >> 1 // 除以二
n << x // 乘以二的x次方
n >> x // 除以二的x次方
n << 1 | 1 // 乘以二然后加一

 求最低位的1

#define lowbit(x) (x)&(-(x))

位运算实现加法

int add(int a, int b) {
	if (0 == b) {
		return a;
	}
	return add(a ^ b, (a & b) << 1);
}

位运算实现减法(从计算机组成原理里面学到的)

int sub(int a, int b) {
	return add(a, ~b + 1);
}

位运算实现乘法(快速幂的一个模板)

unsigned int mult(int a, int b) {
	unsigned int ans = 0;
	while (b) {
		if (1 == (b & 1)) {
			ans += a;
		}
		a = a << 1;
		b = b >> 1;
	}
	return ans;
}

交换数字的二进制中相邻的奇数位和偶数位

int exchange(int n) {
	return ((n & 0xaaaaaaaa) >> 1) + ((n & 0x55555555) << 1);
}

找到该数字的二进制中有多少个1

int calc(int n) {
	int count = 0;
	while (n) {
		n = n & (n - 1);
		count++;
	}
	return count;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章