c++ - 如何获得数字的按位非但不否定符号位?

标签 c++ c

<分区>

我有一个代表掩码的数字,我想得到负掩码(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

最佳答案

如果您希望您的值如您所要求的那样为 6,那么您需要删除它前面所有您未使用的位。

size_t nMsk = (~msk) & 0xF;

0xF 屏蔽它,等于二进制中的 1111 将删除除最后 4 位之外的所有位,从而得到您想要的值。

关于c++ - 如何获得数字的按位非但不否定符号位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37414262/

相关文章:

c++ - 不明确的重载构造函数 : C++

c++ - 在保持顺序的同时从 std::vector 中删除/删除重复元素的方法?

c - size_t 是便携的吗?

c - 在 c 中运行命令行 "ping -S IP HOST"并获取退出代码

c - 双向结构指针链接,C

c++ - 将 vector 以不匹配的大小加载到AVX2寄存器中

c++ - 使用平假名将 std::wstring 转换为 QString

c++ - 什么是错误 MSB4198 : "The expression "DirectoryName"cannot be evaluated"

c - Linux Ubuntu 如何获取远程主机名

c - 使用多边形作为可点击区域,而不是矩形