社区
C语言
帖子详情
取反某一位的问题
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 ?
...全文
1150
14
打赏
收藏
取反某一位的问题
有一整数 num, 另外有一个掩码 mask, mask 中只有一位是 1, 比如 0x00400000. 现在要把 num 中和 mask 为 1 对应的那位取反 有没有比 if(num & mask) { num &= ~mask; } else { num |= mask; } 更简单的方法? 另外有一数 value 是 0 或 1, 有没有简单的方法把 num 的 mask 位置为 value ?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用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
打赏
举报
回复
异或
【C】
取反
操作符「~」
取反
操作符「~」
深入解析C语言中的~和!操作符:位与逻辑
取反
的实战对比
本文深入解析C语言中位
取反
操作符(~)与逻辑
取反
操作符(!)的核心区别与应用场景。通过实战代码对比,详细阐述~如何操作二进制位进行数值翻转,而!如何基于真假逻辑返回0或1,并指出混淆二者可能导致的典型编程错误,帮助开发者精准使用这两个关键操作符。
数字的补数
对整数的二进制表示
取反
(0 变 1 ,1 变 0)后,再转换为十进制表示,可以得到这个整数的补数。
HDU4825 - Xor Sum(Trie 字典树)
题目链接 HDU4825
位运算的高级操作分析
答:这个时候我们可以对应被改变的数x的位次,引进二进制的所有位次上的值全为1的数y,此时当我们对这两个数进行操作x&y,我们可以计算出结果仍为x,他的值并没有改变,而当我们想改变x的话,我们这时候引进y,让x要改变的某
一位
对应在y上那
一位
的数从1变成0,在对x,y进行x&y操作我们马上可以发现对应的值马上变成了我们想要的值。思想:这时我们不知道第k位是什么,所有我们得用到异或^,这时我们需要y=00100,由上可知利用1向左移动k-1位即可,此时x∧(1
C语言
70,040
社区成员
243,237
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章