gpt4 book ai didi

c - 符号扩展到 32 位,从 n 位开始 - C

转载 作者:太空宇宙 更新时间:2023-11-04 01:49:40 25 4
gpt4 key购买 nike

我是 C 的新手,正在练习位操作。

假设我有一个 n 位二进制补码,使得 n > 0 且 n < 31。如果我事先知道 n 的大小,我如何将它符号扩展到 32 位?

如果 n 是 16 位,

int32_t extendMe(int16_t n) {
return (int32_t) n;
}

假设我有数据定义。

假设我有一个 n 位的值,我想将其签名扩展到 32,我该如何实现?

谢谢。

最佳答案

如果这真的是关于将任意位模式解释为使用二进制补码以 n 位表示的数字,那么这里有一些草率的示例代码:

#include <stdio.h>
#include <inttypes.h>

// this assumes the number is in the least significant `bits`, with
// the most significat of these being the sign bit.
int32_t fromTwosComplement(uint32_t pattern, unsigned int bits)
{
// read sign bit
int negative = !!(pattern & (1U << (bits-1)));

// bit mask for all bits *except* the sign bit
uint32_t mask = (1U << (bits-1)) - 1;

// extract value without sign
uint32_t val = pattern & mask;

if (negative)
{
// if negative, apply two's complement
val ^= mask;
++val;
return -val;
}
else
{
return val;
}
}

int main(void)
{
printf("%" PRId32 "\n", fromTwosComplement(0x1f, 5)); // output -1
printf("%" PRId32 "\n", fromTwosComplement(0x01, 5)); // output 1
}

关于c - 符号扩展到 32 位,从 n 位开始 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46580804/

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