关于signed和unsigned、8位、16位、32位整数的比较
eion 2003-04-21 09:17:10 你能不通过计算机,给出下面程序的输出结果吗?
#include <stdio.h>
const unsigned char cu8 = 0xFF;
const unsigned short cu16 = 0xFFFF;
const unsigned long cu32 = 0xFFFFFFFF;
const signed char cs8 = -1;
const signed short cs16 = -1;
const signed long cs32 = -1;
void main(int argc, char* argv[])
{
printf("(%u == %d)\t = %d\n", cu8, cs8, cu8 == cs8);
printf("(%u == %d)\t = %d\n", cu16, cs16, cu16 == cs16);
printf("(%u == %d)\t = %d\n", cu32, cs32, cu32 == cs32);
printf("(%u == %d)\t = %d\n", cu8, cu16, cu8 == cu16);
printf("(%d == %d)\t = %d\n", cs8, cs16, cs8 == cs16);
printf("(%d == %d)\t = %d\n", cs8, cs32, cs32 == cs8);
printf("(%u ^ %d)\t = %d\n", cu8, cs8, (cu8^cs8)==0);
printf("(%u ^ %d)\t = %d\n", cu32, cs32, (cu32^cs32)==0);
printf("(%u ^ %d)\t = %d\n", cs32, cu16, (cs32^cu16)==0);
printf("(%u ^ %d)\t = %d\n", cu32, cs16, (cu32^cs16)==0);
}
问题的关键在于符号位的扩展。
各位请在运行程序前给答案,让大家辩论一下,以增进对符号扩展的理解,OK?