读书人

取反某一位的有关问题

发布时间: 2012-03-19 22:03:05 作者: rapoo

取反某一位的问题
有一整数 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 } 比较好 ....

读书人网 >C语言

热点推荐