【发布时间】:2022-11-18 08:35:05
【问题描述】:
一开始,我意识到我的所作所为很糟糕。如果没有明确禁止的话,我依赖于现在(至少)未定义的行为。它曾经有效,我认为我很聪明。现在它没有,我正在尝试修复它。
我有 2 的正幂数(FFT bin 索引,但不重要)。我想通过将值的后半部分包装到负范围来有效地对一组 bin 索引进行 FFT 移位。也就是说,给定 FFT 大小为 512,
0 ... 255 -> 0 ... 255
256 ... 511 -> -256 ... -1
曾经工作的是
template <size_t N>
struct Wrapper {
int val : N;
};
auto constexpr index = 42u;
auto wrapper = Wrapper<9>{ index }; // warning: invalid narrowing conversion from "unsigned int" to "int"
auto val = wrapper.val; // signed value
这依赖于溢出分配的截断,但经过经验测试和 Just Worked(tm)。
现在,它不能(干净地)编译。
我现在应该如何执行此转换?
【问题讨论】:
标签: c++ bit-fields