0

如何在 C++ 中将 11 位数字符号扩展为 32 位数字?

我有以下功能,但它没有按预期返回正确的符号扩展:

unsigned int signExtend11to32ui(int i) {
    int mask = 2047; // 0x7FF or 0000 0111 1111 1111
    return static_cast<unsigned int>(static_cast<int>(i & mask));
}

以下函数适用于 16 位到 32 位的符号扩展:

unsigned int signExtend16to32ui(short i) {
    return static_cast<unsigned int>(static_cast<int>(i));
}
4

1 回答 1

2

由于在 C++ 中右移和左移是算术运算,因此您可以将整数右移到 int 的最高有效位,然后再返回:

std::int32_t i = 2047;
i = (i << 21) >> 21;

这使-1i

于 2017-03-11T08:06:39.360 回答