我正在研究一个 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 位字中的位。我当前的实现是功能性的,但我想重写它以便结果可以用作 a constexpr
,函数签名需要是:
template<unsigned long bits>
constexpr unsigned long&& bitreverse(unsigned long value);
或者:
template<unsigned long bits,unsigned long value>
constexpr unsigned long&& bitreverse();
或接近的东西...
我不确定如何开始实施。
如果可能的话,我想避免按位运算,但我并不反对。
谢谢