2011-10-29 81 views
2

正如我們知道4294967295是unsigned int中的最大數字,如果我將此數字自身乘以那麼該如何顯示它?我曾嘗試過:顯示很大數

long unsigned int NUMBER = 4294967295 * 4294967295; 

但仍然得到1作爲答案。

+0

可能重複http://stackoverflow.com/questions/2844/how-do-you-printf-an-unsigned-long-long- INT) – mloskot

回答

3

您正在發生溢出。考慮muplication十六進制:

0xffffffff * 0xffffffff == 0xfffffffe00000001 
            ^^^^^^^^ 
            only the last 32 bits are returned 

解決的辦法是使用更大的類型如long long unsigned

long long unsigned int NUMBER = 4294967295ULL * 4294967295ULL; 

後綴ULL裝置unsigned long long

看到它聯機工作:ideone

+0

感謝先生,但是如果我的號碼是儲存在像無符號unsigned long int類型NUM整數= 4294967295;然後 – mainajaved

0

在你的問題,你知道最大INT幽州等於4294967295。這意味着,你不能存儲數量比大,如果你使用的是無符號整型。

Ç多頭存儲多達18,446,744,073,709,551,615當64位UNIX系統[source]所以你只需要與UL後綴你的號碼無符號:4294967295UL

如果您使用的不是64位UNIX系統,那麼你應該使用long long unsigned int和後綴LL

+0

非常感謝主席先生\t 感謝先生,但是如果我的電話號碼是整數存儲像無符號unsigned long int類型NUM = 4294967295;然後 – mainajaved

-1

是的,這是一個溢出。如果你使用c,那麼就沒有任何簡單的方法可以做到像我知道的那樣大數倍。也許你需要自己寫一個。實際上有些語言最初支持這些功能。

1

乘法溢出。

#include <stdio.h> 
int main() 
{ 
    unsigned int a = 4294967295; 
    unsigned int b = 4294967295; 

    // force to perform multiplication based on larger type than unsigned int 
    unsigned long long NUMBER = (unsigned long long)a * b; 
    printf("%llu\n", NUMBER); 
} 
的[你怎麼printf的一個unsigned long長整型?](
+0

謝謝先生,但如果我的號碼存儲在整數像無符號無符號長整型號= 4294967295;然後 – mainajaved

+0

@mainajaved我已更新我的評論 – mloskot

+0

好的,非常感謝這麼多先生 – mainajaved