打印

C语言 整型常量 加后缀问题

[复制链接]
6304|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
电子乌托邦|  楼主 | 2009-10-20 22:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C课本截段话:
“长整数15L和基本整常数15 在数值上并无区别。但对15L,因为是长整型量,C编译系统将为它分配4个字节存储空间。而对15,因为是基本整型,只分配2 个字节的存储空间。因此在运算和输出格式上要予以注意,避免出错。”
eg. long a = 15;
听他这句话的意思:给变量分配空间是按后面值(15)来的,应该是按前面的变量类型(long)来分配吧?


试验环境keil C51 仿真
1.void main(void)
    {
        long a = 15;
        while(1);
    }

查看变量a分了4个字节;
2.void main(void)
    {
        long a = 15L;
        while(1);
    }

查看变量a分了4个字节;


说明给变量分配空间,还是按变量类型决定的。
那写不写整型常量后缀不都一样了嘛!
求教??

相关帖子

沙发
原野之狼| | 2009-10-21 01:17 | 只看该作者
常量赋值给变量,类型由变量的类型决定。
如果直接使用常量,那就和常量的后缀有关了。

使用特权

评论回复
板凳
zyboy| | 2009-10-21 09:16 | 只看该作者
书上也不完全正确,这和你的多少位机还有关系
我觉得应该改成这样
长整数15L和基本整常数15 在数值上并无区别。但对15L,因为是长整型量,C编译系统将为它分配4个字节存储空间。而对15,因为是基本int整型,(对于32位机int分配4个字节,8,16位机分配2个字节)。因此在运算和输出格式上要予以注意,避免出错。”

例如在KEIL--51中

long totalsec;
totalsec =  60* 60 * 24 * 365;      //结果只保留2个字节,错误  0x3380
totalsec =  60ul* 60 * 24 * 365;  //正确  0x1E13380

例如在KEIL_ARM
long totalsec;
totalsec =  60* 60 * 24 * 365;      //结果只保留4个字节,正确0x1E13380
totalsec =  60ul* 60 * 24 * 365;  //正确0x1E13380

使用特权

评论回复
地板
电子乌托邦|  楼主 | 2009-10-21 14:55 | 只看该作者
谢谢楼上,有点明白了。
不过还想问一下:难道编译器还为整型常量分配内存?
我一只以为只为变量分配内存!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

140

主题

633

帖子

2

粉丝