c语言程序题目

[复制链接]
查看11 | 回复5 | 2009-2-23 20:35:02 | 显示全部楼层 |阅读模式
#include"stdio,h"
void main()
{ short i=-4;
printf("%d,%x,%o,%u",i,i,i,i);
}
结果是 -4,fffffffc,37777777774,4294967292
我的运行环境是vc++6.0,short是两个字节的,但是为什么答案出来的是四个字节的.

回复

使用道具 举报

千问 | 2009-2-23 20:35:02 | 显示全部楼层
楼主既然说了是VC6, 那么问题当然不是short的长度会随编译器变化.真正的原因是:printf的原型是: int printf(const char*, ...);它只指定了第一个参数的类型.当你调用这种变参函数(参数个数可变的函数)时, 若传入的实参是被调函数原型的可变部分(即三个点表示的部分), 则实参会进行如下的自动转换:1 若实参为比int窄的类型, 则会自动提升为int2 若实参是float型, 则会自动提升为double3 若实参是int,long(不管有无符号), 则保持不变因此, 你的 printf("%d,%x,%o,%u",i,i,i,i); 完全等价于printf("%d,%...
回复

使用道具 举报

千问 | 2009-2-23 20:35:02 | 显示全部楼层
个人认为short在存储的时候是占2个字节,记得书上也是说再存储时,而你的程序是让他一不同的形式输出,输出的数是用以存储的数变换形式而表现出来,貌似没有存储。...
回复

使用道具 举报

千问 | 2009-2-23 20:35:02 | 显示全部楼层
类型的长度是根据你的编译器来的,比如有的编译器int为16位,有的为32位,比较正常...
回复

使用道具 举报

千问 | 2009-2-23 20:35:02 | 显示全部楼层
编译器不同,字节不同...
回复

使用道具 举报

千问 | 2009-2-23 20:35:02 | 显示全部楼层
换个编译器看看...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行