一个c的小程序——长整型问题?

来源:百度知道 编辑:UC知道 时间:2024/05/24 03:06:32
#include "stdio.h"
main()
{
int i,j;
long k;
i=100;
j=1000;
k=i*j;
printf("%ld\n",k);
}
运行结果为:-31072

明显是数据越界了嘛。但是已经把k设为长整型了,100,000这个数应该是没有越界的。
请问是咋回事么~
运行环境:tc2.0

改法为:

#include "stdio.h"
main()
{
int i,j;
long k;
i=100;
j=1000;
k=(long)i*j;
printf("%ld\n",k);
}

虽然K 是长整型,但i和j都是整型,如果i和j 其中有一个是长整型也行!

因为自动转换的规则是向运算表达是中位数最长的类型转换,你表达试中两个都是整型,所以不会转换.
因此:这样改也行!
#include "stdio.h"
main()
{
int j;
long i,k;
i=100;
j=1000;
k=i*j;
printf("%ld\n",k);
}

或者
#include "stdio.h"
main()
{
int i;
long j,k;
i=100;
j=1000;
k=i*j;
printf("%ld\n",k);
}

运行结果都正确
100,000

会不会是自动类型转换了,类型也是有优先级别的
具体是怎样我不太记得了,看看书吧
会找到为什么的

你用size(long)看下是多少位不就知道了,长整型的位数跟编译器有关的.或者换成能存储更大数据的类型就知道是怎么回事了.

#include "stdio.h"
main()
{
int i,j;
long k;
i=100;
j=1000;
k=(long)i*(long)j;
printf("%ld\n",