符号将11位扩展到32位

Sign extend 11 bits to 32 bits

本文关键字:32位 扩展到 11位 符号      更新时间:2023-10-16

如何签名将11位数字扩展到C 中的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));
}

由于左右偏移是算术在C 中,因此您可以正确移动整数到最重要的INT,然后返回:

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

这将-1置于 i