取反某一位的问题

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 ?
...全文
1095 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
异或

70,024

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧