因为您把变量 e 的类型定义成了 int 类型,因而赋值语句 e = 65536L 这条赋值语句将长整形常数 65535L 赋值给整形变量 e 时自动进行了类型转换(long 转换成 int), 其实等效于: e = (int)65535L;
如果你想让 e 的值是 long 类型,必须把 e 声明为 long 型。
long e = 65535L;
#include
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();
}
长整型要用对应的变量来赋值吧,要有预期效果c必须声明为long才行,否则做加法就越位了,e后面那个l就省了吧,l的作用是告诉编译器这个数处理为长整型,但是你的赋值变量是整形,结果e还是转换成整形,而且如果你的字面值超过了int的长度的话,越位部分数值在编译时会截掉,如果越位发生在内存读取的时候,还有可以导致高位溢出到临近的内存中,当然c的结果变成其他值。
int的最大表示就是65535 你的结果超出显示范围了
就算你用 65535L来赋值 但是c本身是int的 不可能用赋值去改变变量本身
除非定义的时候 long c c=65535l
long int a,b,c,d,e;