C语言上不是说在数字后加L或者l 就为长整型吗?

C语言上不是说在数字后加L或者l 就为长整型吗?
#include<stdio.h>
void main()
{
int a=12,b=-24,c,d,e;
e=65535l;
c=a+e;d=b+e;
printf("%d,%d",c,d);
getch();
}
这个程序结果不对啊
#include<stdio.h>
void main()
{
int a=12,b=-24,c,d,e;
e=65535l;
c=a+e;d=b+e;
printf("%ld,%ld",c,d);
getch();
}
改成这样也不对啊

因为您把变量 e 的类型定义成了 int 类型,因而赋值语句 e = 65536L 这条赋值语句将长整形常数 65535L 赋值给整形变量 e 时自动进行了类型转换(long 转换成 int), 其实等效于: e = (int)65535L;

如果你想让 e 的值是 long 类型,必须把 e 声明为 long 型。

long e = 65535L;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-22
#include<stdio.h>
void main()
{
int a=12,b=-24,c,d,e;
e=65535l; //这个地方有自动类型转换,65535l表示长整型,但赋给整型变量时,自动转换为整型后才赋值的。在16位TC中,可能存在溢出。在32的VC中,后面这些运算是正确的。
c=a+e;d=b+e;
printf("%d,%d",c,d);
getch();
}
第2个回答  2011-08-22
长整型要用对应的变量来赋值吧,要有预期效果c必须声明为long才行,否则做加法就越位了,e后面那个l就省了吧,l的作用是告诉编译器这个数处理为长整型,但是你的赋值变量是整形,结果e还是转换成整形,而且如果你的字面值超过了int的长度的话,越位部分数值在编译时会截掉,如果越位发生在内存读取的时候,还有可以导致高位溢出到临近的内存中,当然c的结果变成其他值。
第3个回答  2011-08-22
int的最大表示就是65535 你的结果超出显示范围了
就算你用 65535L来赋值 但是c本身是int的 不可能用赋值去改变变量本身
除非定义的时候 long c c=65535l
第4个回答  2011-08-22
long int a,b,c,d,e;