专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > C++

,turbo c下65536的输出疑惑!

发布时间:2011-06-28 21:31:58 文章来源:www.iduyao.cn 采编人员:星星草
求助,turbo c下65536的输出疑惑!!
请教各位c高手,在turbo c下输入如下程序:
main()
{ long a;
  a=65536;
  printf("a=%ldn",a);
  printf("a=%d,a=%ldn",a,a);
}
运行结果为:
  a=65536
  a=0,a=1

疑问:长整型a直接输出没有问题,所以第一个输出结果没问题,当将a分别以基本整型和长整型输出时,结果不是很明白,由于turbo c下基本整型int为两字节,long为4字节,用printf输出时从右向左压栈,再从左向右依次取出吧,开始是%d输出,应该有一次类型转换,4字节截取两个低字节,65536两个低字节全都为0,所以结果a=0,可是后面一个输出a=1就不太明白了,望高手能指点一下,是不是我的理解有问题啊,谢谢!!!

------解决方案--------------------
你是用的16位DOS模式?
假设左边是栈底 右面是顶 65536 = 0x00010000
则第一个堆栈先压高再压低 0001 0000 XXXX <-- XXXX 是第一个printf格式串地址 printf看到%1d知道取4个字节所以正确
第二个堆栈 0001 0000 0001 0000 XXXX <-- XXXX 是第二个printf格式串地址 printf先看到%d 就取两个字节 就是0000 打印0 然后看到%1d知道取4个字节 就是 00000001 打印1
原因就是这样 不过这倒是个以前没注意过的问题 我得找机会试试
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: