C 如何将字符大小的二进制有符号数扩展为有符号整数大小

C 如何将字符大小的二进制有符号数扩展为有符号整数大小,c,bit,extend,signed,C,Bit,Extend,Signed,此函数:int-signextend(int-value,int-size) 以有符号二进制形式接收值(最高有效位表示信号+(如果为0)或-(如果为1))并接收该二进制值的大小。 目标是将该值扩展为整数大小。我该怎么做 我知道如果最高有效位是1或0,我需要2 if's one来扩展1或0,但我不知道如何从值中选择最高有效位,类似的方法应该可以工作。顺便说一下,这些数字称为符号幅度: int signextend(unsigned int value, unsigned int size) {

此函数:
int-signextend(int-value,int-size)
以有符号二进制形式接收值(最高有效位表示信号
+
(如果为0)或
-
(如果为1))并接收该二进制值的大小。 目标是将该值扩展为整数大小。我该怎么做


我知道如果最高有效位是1或0,我需要2 if's one来扩展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;
}
int-signextend(无符号int值,无符号int大小)
{
常量无符号整数topmask=1u
此二进制值的大小

如果您的意思是这是二进制字符串的长度(例如,由
1010
表示的int 10将给出size=4),则只需执行此操作

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

size
是否以字节或位为单位指定源数据的大小?以前这里有多个符号扩展问题,这个问题可能是重复的。@njuffa size指定值中的位数,例如I receive 1011 so size=4,我想选择左侧的位,在本例中为1。然后扩展它(int size=32 size(在本例中为4))向左乘以,因此它类似于11111…111111 011长度为4的二进制字符串1011是否表示十进制数-5(2的补码表示)、-4(1的补码表示)或-3(符号和幅值表示)?非常感谢。这是我需要的东西谢谢你的帮助,我会尝试一下。^如果最高有效位为1,则必须签名,数字应扩展为1。如果为0,则数字应扩展为0。已签名,扩展的差异存在