C语言编程运行答案有些不明白~请编辑宽宏大量不要删,很急,真的不?
我对这道程序题的最后产生的结果有一些不明白程序如下:#includevoidmain(){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);}我自己在纸上运算的答案是:1
从你说的编译结果可知,你使用的编译器是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呀。不知道你那书是啥?还有你上机操作的环境?