C语言无符号整形和无符号短整型显示负数结果为什么不一样?

如题所述

第1个回答  2020-04-08
因为printf里用%d来输出某个变量时,程序会默认该变量为int型。如果该变量是整型,但不是int,而是char或者short,程序会先把它转换成int型,再传给printf.
所以用unsigned
int
a=-12时,没有上面所说的转换步骤,%d当成有符号整数,输出是-12,没问题。
unsigned
short
a=-12时,
注意这时候a是16位,在内存中是11111111
11110100,转换成int型会变成32位,程序在它的左边会添加16个0,变成00000000
00000000
11111111
11110100,这时候符号位是0了,当然变成正数了。
相似回答