gpt4 book ai didi

c++ - 如何将所有设置位向右移动?

转载 作者:太空狗 更新时间:2023-10-29 23:36:25 24 4
gpt4 key购买 nike

问题:如何开发算法将32位整数中的所有设置位(1)右移

例子

V= 0b01001000110010 

V包含 5 个设置位,如果我们将它们向右移动,我们会得到:

V = 0b011111

我尝试过的:

v = v - ((v >> 1) & 0x55555555);                    // reuse input as temporary
v = (v & 0x33333333) + ((v >> 2) & 0x33333333); // temp
c = ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24; // count

以上代码返回32位整数中设置的位数

并使用以下代码

c = (1<<c) - 1;

我们将得到 c第一位设置为 1 . Explaination

是否有其他算法比上述解决方案更好?

是否可以在建议的解决方案中仅使用按位运算(&|^~>><<)?

最佳答案

bitset<32> const bv( V );
size_t const numSetBits = bv.count();
uint32_t const answer = ~( ~0U << numSetBits );

关于c++ - 如何将所有设置位向右移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16004208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com