取反某一位的问题

www_adintr_com 2007-08-02 05:04:55
有一整数 num, 另外有一个掩码 mask, mask 中只有一位是 1, 比如 0x00400000.
现在要把 num 中和 mask 为 1 对应的那位取反
有没有比

if(num & mask)
{
num &= ~mask;
}
else
{
num |= mask;
}

更简单的方法?

另外有一数 value 是 0 或 1, 有没有简单的方法把 num 的 mask 位置为 value ?
...全文
782 点赞 收藏 14
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
mLee79 2007-08-02
虫虫哪个题目不好, value 取值应该是 { 0 , mask } 比较好 ....
回复
jixingzhong 2007-08-02
看岔了 ...
回复
jixingzhong 2007-08-02
第一个使用 num ^= mask 结果应该不是想要的 ...

其他的位也被修改了,
楼主的本意应该是不修改mask的其他位的吧?
回复
rsp19801226 2007-08-02
等我写出来都N多高手在说了~~-_-!!
回复
rsp19801226 2007-08-02
1、好象直接num = num ^ mask;就可以了吧,与0异或不变,与1异或取反。
2、好象判断不了位置,还是要if才行吧。
回复
jixingzhong 2007-08-02
另外有一数 value 是 0 或 1, 有没有简单的方法把 num 的 mask 位置为 value ?

if(value)
num |= mask;
else
num &= ~mask;
回复
我啃 2007-08-02
对哦,菜鸟了一次~
回复
david2083 2007-08-02
num ^= mask 已然OK
回复
我啃 2007-08-02
num & ~mask保存除mask那位所有的数据
num & mask只留下num对应mask的那位
然后和mask异或,如果是1异或结果是0,如果是0结果是1,完成定位取反
然后两个数值或一个就是拼起来,应该对吧~
回复
我啃 2007-08-02
好像写错了,再来一个:
num2 = (num & ~mask) | ((num & mask) ^ mask);
回复
lyg_zy 2007-08-02
用^异或
示例代码如下:
int mask = 0x00400000;
int n = 0x00412345;
int n1 = n ^ mask;
n = 0x00012345;
n1 = n ^ mask;
已测试,不管此位是否为1,都是取反。
回复
我啃 2007-08-02
num = (num & ~mask) | (num ^ mask);
回复
我啃 2007-08-02
不来蹭点分对不起自己~
回复
houdongfeng 2007-08-02
异或
回复
相关推荐
发帖
C语言
创建于2007-09-28

6.4w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2007-08-02 05:04
社区公告
暂无公告