了解签名扩展

时间:2011-08-20 15:36:11

标签: c

int main()
{
  unsigned int b;
  signed int a;
  char z=-1;
  b=z;
  a=z;
  printf("%d %d",a,b);
}

给出-1 -1。为什么没有符号扩展,也就是什么时候发生?

2 个答案:

答案 0 :(得分:10)

发生签名扩展DID,但您打印的结果不正确。在您的printf中,您为%d指定了b,但b未签名,您应该使用%u来打印b

printf不知道其参数的类型,并使用指定的格式来解释它们。

printf("%d %u",a,b);

答案 1 :(得分:3)

因为printf查看原始内存,而不是类型。使用%u将值打印为无符号。

请参阅。

http://ideone.com/Qpcbg