思路
在这里,我们假设一个数为13,其二进制形式为00000000...01101,这里我们假设要将第五位的0改成1,其他位不变。大家可以想到什么方法呢?
显然,这里我们按位或(|)10000即16,2^4,这个16怎么得到呢?可以将1<<4即可得到。
那如果我们要将第五位的1重置为0呢?
这里我们可以按位与(&)上11111……01111,(即只有第五位上是0)这个怎么得到呢.很明显,我们可以通过~(1<<4)即可得到。
代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int n = 13;
//改成1
n |= (1 << 4);
printf("%d\n", n);
//改成0
n &= (~(1 << 4));
printf("%d\n", n);
return 0;
}
“码”思泉涌,下“指”有神