gpt4 book ai didi

c++ - 有没有一种简单的方法来获得 std::bitset 的 2 的补码

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:44:54 27 4
gpt4 key购买 nike

我正在使用 std::bitset<N>在我的程序中,需要找到最低有效位并进行如下简单计算:

int num = 5;
int res = num & (-num);

之后 num 的最低有效位设置在 res其余都是0的。这用作 -5以 2 的补码表示。

但是我找到了std::bitset<N>一元 operator - 没有任何运算符重载这会给我基础位的 2 的补码。有没有一种简单的方法可以用 std::bitset<N> 实现 2 的补码? ?我总是可以使用 operator ~从 LSB 到 MSB 翻转位并在它们上循环进行求和和进位,但我一直在寻找可以避免这种情况的解决方案。

最佳答案

std::bitset不提供任何补充方法。因为你必须自己计算补码 operator~和一个额外的循环,只需跳过 operator~()并直接搜索 LSB:

template <int N>
size_t least_significant_bit(const std::bitset<N> &bt){
for(size_t i = 0; i < bt.size(); ++i){
if(bt.test(i))
return i;
}
}

我想没有比这更微不足道的了 ;)。

请注意 least_significant_bit 的结果如果根本没有位,则未指定。可以返回 N或更改循环以测试 bt.test(N)这会抛出异常,但毕竟在空位集中查找 LSB 没有任何意义。

进一步说明,您可以使用 std::bitset<N>::operator[]而不是 std::bitset<N>::test如果您对边界检查不感兴趣。

关于c++ - 有没有一种简单的方法来获得 std::bitset<N> 的 2 的补码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15320947/

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