生成位掩码

3

给定两个整数; sizeoffset,如何生成一个具有以下属性的位掩码;

MSD             LSD
1111 1111 0000 1111
          ^  ^
size = 4 -|  |
             |  
offset = 4  -|

((1 << size) - 1) << offset 这个表达式是否得到了你想要的补码呢?另外,如果 size=32offset=0(假设是32位整型),使用该表达式将产生未定义的行为。 - Praetorian
它确实可以,但接下来只需要做补集就能得到真正的东西。而且我的大小永远不会是完整的,对此有一个静态断言(现在就是)。 - Skeen
@markgz:我将问题标记为C++11的原因并不是因为相关性,而是因为我愿意使用C++11。 - Skeen
请不要在问题中添加解决方案。如果您有解决方案,请随时在下面发布答案。 - cigien
1个回答

2

由于问题标记为c++, 我将提供一个基于STL的解决方案:

bitset<NUM_BITS> bs(0);
bs = ((bs.flip() << size).flip() << offset).flip();

同一代码分成几行:

bitset<NUM_BITS> bs(0);
bs.flip();
bs <<= size;
bs.flip();
bs <<= offset;
bs.flip();

性能方面的考虑取决于读者。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接