位运算

文章目录

    • 1.lowbit 计算一个数二进制下最低位 1 对应的值
    • 判断一个数x二进制下的第i位是否为1
    • 将一份数字x二进制下第位改为1
    • 计算一个数字x二进制下含有1或0的个数
    • 判断一个数x是否为 2 的n次方
    • 对 1 ^ (异或)

1.lowbit 计算一个数二进制下最低位 1 对应的值

int lowbit(int x) {
	return x&(-x)
}

判断一个数x二进制下的第i位是否为1

bool isOne(int x) {
	int i; 
	// 想办法取出x的第 i 位 
	return ( (1<<(i-1)) & x )
}

将一份数字x二进制下第位改为1

解释: 将 1 左移 i-1 位,相当于制造了一个只有第 i 位上是 1,其他位上都是 0 的二进制数,然后与 x 或运算即可

void change(int x) {
	int i;
	// 想办法取出x的第 i 位 
	x |= (1 << (i-1))
}

计算一个数字x二进制下含有1或0的个数

int getAns {
	int num=0;
	while(x) {
		 x &= (x-1);
		 num++;
	}
	return num;
}

判断一个数x是否为 2 的n次方

bool judge(int x) {
	return (x & (x-1)) == 0;
}

对 1 ^ (异或)

偶数 : x ^ 1 = x + 1
奇数 : x ^ 1 = x + 1

你可能感兴趣的:(#,算法学习)