取反某一位的问题
有一整数 num, 另外有一个掩码 mask, mask 中只有一位是 1, 比如 0x00400000.
现在要把 num 中和 mask 为 1 对应的那位取反
有没有比
if(num & mask)
{
num &= ~mask;
}
else
{
num |= mask;
}
更简单的方法?
另外有一数 value 是 0 或 1, 有没有简单的方法把 num 的 mask 位置为 value ?
[解决办法]
异或
[解决办法]
用^异或
示例代码如下:
int mask = 0x00400000;
int n = 0x00412345;
int n1 = n ^ mask;
n = 0x00012345;
n1 = n ^ mask;
已测试,不管此位是否为1,都是取反。
[解决办法]
num ^= mask 已然OK
[解决办法]
另外有一数 value 是 0 或 1, 有没有简单的方法把 num 的 mask 位置为 value ?
if(value)
num |= mask;
else
num &= ~mask;
[解决办法]
1、好象直接num = num ^ mask;就可以了吧,与0异或不变,与1异或取反。
2、好象判断不了位置,还是要if才行吧。
[解决办法]
虫虫哪个题目不好, value 取值应该是 { 0 , mask } 比较好 ....