【发布时间】:2016-05-30 20:43:08
【问题描述】:
我有一个代表掩码的数字,我想得到负掩码(0110,即 6)。我想不按位做,但似乎它也否定了符号位,我得到了一个不需要的值......
size_t msk = 9; // that is 1001, or 000...01001 on more bits
size_t nMsk = ~msk; // this I want to be 6, that is 0110, but bitwise not
// is negating all the bits, so I get 111...10110
有没有快速的方法(没有循环)?
编辑 更多信息:
我在其中一个答案的评论中添加了一些更好的案例: 在我的例子中,16 是 100000000,~16 不是 111011111111,而是 000011111111
【问题讨论】:
-
这是干什么用的?你确定这是问题吗?通常当人们想要这样的东西时,事实证明他们被额外的设置位分散了注意力,结果证明他们不是问题。如果您使用 4 位数字,那很简单:
nMsk = msk ^ 15 -
不,我正在处理更大的数字,但在 4 位上显示它很容易 :) 抱歉
-
唯一的方法是对设置为 1 的值进行异或运算,直到 the highest bit in your input。
-
size_t未签名!因此,根据定义,它没有符号位。你的问题不清楚。 -
@sop:不,不是。这可能是一个 XY 问题。您提出的“解决方案”背后的实际问题是什么?