关于print时的强制类型转换

int main(int argc, char *argv[])

   short a = 0xffff;
 
   printf("a = 0x%x\n", a);

  if(a == 0xffff) 

  {

    printf("Just Test\n");

  }

  return 0;
}

 

最后输出的结果是 a = 0xffffffff

原因如下:

1.%x 表示要输出无符号整数(unsigned int)的十六进制形式

2.当有符号类型向更大长度类型转换时,如果首位为1,则前面全部补全为1,如首位为0,则前面全部补全为0

预期的打印Just Test不会被打出来,因为:

在比较时a被强制转换成unsigned int(即0xffffffff)  与 0x0000ffff比较不相等

你可能感兴趣的:(print)