C-如何将符合字符尺寸的二进制签名数字扩展到签名的int尺寸



此功能: int signextend( int value, int size )在签名的二进制中接收一个值(最重要的位表示信号+如果是0或-(如果是1(,则接收该二进制值的大小。目标是将值扩展到签名的int尺寸。我该怎么做?

我知道我需要2如果是一个,如果最重要的位是1或0,则用1或0扩展它,但我不知道如何从值中选择最重要的位

类似的东西应该起作用。顺便说一句,这些数字称为标志刻度:

int signextend(unsigned int value, unsigned int size)
{
  const unsigned int topmask = 1u << (size - 1);
  if((value & topmask) != 0)
  {
    return -(value & ~topmask);
  }
  return (int) value;
}

这使参数 unsigned因为签名对我没有意义。

如果这样称呼:signextend(0xc, 4);它将返回-4( 0xc是二进制中的 1100(。

请注意,此格式可以表达-0(例如signextend(0x80, 8);(,哪些当然不能表示为int,并将映射到0。

这个二进制值的大小

如果是这样,您的意思是这是二进制字符串的长度(例如1010代表的INT 10,将给出尺寸= 4(,然后只做此

int b = 8;
int size = 4;
printf("this is the most significant bit %d", b >> size-1);

最新更新