[英]Why does GCC use multiplication by a strange number in implementing integer division?
[英]Why does using long int in multiplication generate a strange number?
編譯此代碼后:
#include <stdio.h>
int main()
{
long int a = 1000 * 1000 * 1000 * 1000 * 1000 * 1000;
printf("%i\n", a);
return 0;
}
結果是-1486618624
。 如何使此代碼起作用?
預先感謝您的任何回答!
該實例1000
您指定的int
S,因此乘法乘以發生int
S和得到一個int
。 在分配給long int
之前,這已經溢出了。 嘗試:
long int a = 1000L * 1000L * 1000L * 1000L * 1000L * 1000L;
另外,您還需要使用long int
格式打印答案,例如:
printf("%ld\n", a);
請注意, long int
可能也太小(如果在某些32位平台上, long int
的最大可存儲值為2^31 - 1
,而在64位平台上則為2^63 - 1
就足夠了),其中案例嘗試:
long long int a = 1000LL * 1000LL * 1000LL * 1000LL * 1000LL * 1000LL;
printf("%lld\n", a);
即使您分配了一個long int
,您的1000
秒中的每一個都是一個int
,因此計算機嘗試將結果計算為int
。 超過最大int
大小的數字溢出,導致其“回繞”並被視為負數,因為用於int
的內存中的一位是負標志。
您需要使用1000L
或(long int) 1000
1000L
1000
秒。 您還需要%ld
而不是printf
的%i
。
嘗試使用
long long var=1000LL*1000LL*1000LL; // append LL
printf("%lld",var);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.