簡體   English   中英

為什么在乘法中使用long int會生成一個奇數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM