gpt4 book ai didi

c++ - 使用 C++ constexpr 对 N 位字进行位反转

转载 作者:行者123 更新时间:2023-11-30 05:33:48 26 4
gpt4 key购买 nike

我正在研究用于 fft 实现的位反转算法,到目前为止我的实现是

//assume the proper includes

template<unsigned long bits>
unsigned long&& bitreverse(unsigned long value){
std::bitset<bits> input(value);
std::bitset<bits> result;
unsigned long j=input.size()-1;
for (unsigned long i=0; i<input.size(); ++i) {
result[i]=input[j];
j--;
}
return std::move(result.to_ulong());
}

我需要能够反转 N 位字中的位。我当前的实现是功能性的,但我想重写它以便结果可以用作 constexpr,函数签名需要是:

template<unsigned long bits>
constexpr unsigned long&& bitreverse(unsigned long value);

或:

template<unsigned long bits,unsigned long value>
constexpr unsigned long&& bitreverse();

或接近...

我不确定如何开始实现。

我想尽可能避免按位运算,但我并不反对。

谢谢

最佳答案

你可以这样做:

template <unsigned long bits>
constexpr unsigned long bitreverse(unsigned long value) {
unsigned long result = 0;
for (std::size_t i = 0, j = bits - 1; i < bits; ++i, --j) {
result |= ((value & (1 << j)) >> j) << i;
}
return result;
}

我不确定您为什么要对返回类型使用右值引用。它不会使任何事情更有效率,我认为 will result in a dangling reference .

关于c++ - 使用 C++ constexpr 对 N 位字进行位反转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34561558/

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