分类：电脑/网络-程序设计-C/C++
问题：C语言编程运行答案有些不明白~请编辑宽宏大量不要删，很急，真的不? 
我对这道程序题的最后产生的结果有一些不明白程序如下:#include<stdio.h>voidmain(){inta,b;unsignedc,d;longe,f;a=100;b=-100;e=50000;f=32767;c=a;d=b;printf("%d,%d\n",a,b);printf("%u,%u\n",a,b);printf("%u,%u\n",c,d);c=a=e;d=b=f;printf("%d,%d\n",a,b);printf("%u,%u\n",c,d);}我自己在纸上运算的答案是:100,-100100,100100我对这道程序题的最后产生的结果有一些不明白程序如下:#include<stdio.h>voidmain(){inta,b;unsignedc,d;longe,f;a=100;b=-100;e=50000;f=32767;c=a;d=b;printf("%d,%d\n",a,b);printf("%u,%u\n",a,b);printf("%u,%u\n",c,d);c=a=e;d=b=f;printf("%d,%d\n",a,b);printf("%u,%u\n",c,d);}我自己在纸上运算的答案是:100,-100100,100100,100100, 00, 00,32767但是标准答案和上机操作的答案都是:100,-100100,654360, , ,32767答案的第一行没有问题,但是从第二行开始就不太明白为什么会得出这样的答案……请高手讲解一下(不用太复杂,就是说一下怎么得出这样的数字） 
回答：从你说的编译结果可知，你使用的编译器是16位的编译器。（机器是16位的会有这样的结果，不过现在可不会有16的机器）
第一个printf打印a，b的值，a，b是int类型。你使用了正确的格式转换说明符%d。所以打印无误。
第二个printf同样打印a，b的值，而格式转换说明符用了%u，它是用来表示无符号十进制的。所以计算机将b的-100解释为65436。是因为：首先，它们的大小为2字节。其次，系统使用2的补码的方法表示有符号整数，在这种方法中，数字0到32767代表它们本身，而数字32768到65535则代表负数，65535代表-1，65534代表-2，以次类推。所以-100由65536-100即65436来表示。既当被解释为有符号整数时65436代表-100，而被解释为无符号时，65436代表65436。
其他的解释原理和上面相同。
不过第三行，为什么你的标准答案将c打印出0，就搞不懂了。我用cl，gcc，turbo c2试了，都该解释为100呀。不知道你那书是啥？还有你上机操作的环境？