我在下面写了一个小程序。
#include <stdio.h>
main(){
char a=-1;
unsigned char b=-1;
printf("%d %d\n",a,b);
printf("%x %x\n",a,b);
if(a==b) printf("equal\n");
else printf("not equal\n");
}
prog的输出是:
-1 255
ffffffff ff
not equal
由于 char 只有一个字节,而 -1 以 2 的补码形式表示,我认为 0xff 将存储在 a 和 b 中,因此两者应该相等。谁能让我知道它们为什么不同以及为什么 a 的十六进制表示是 0xffffffff 而不是 0xff。我得到了一个相关链接http://embeddedgurus.com/stack-overflow/2009/08/a-tutorial-on-signed-and-unsigned-integers/但我无法得到答案。任何帮助将不胜感激。谢谢。