2011-10-29 11 views
2

私は知っているように、私は4234967295がunsigned intの中で最大の数字であることを知っています。私は試してみました:非常に大きな数字を表示

long unsigned int NUMBER = 4294967295 * 4294967295; 

しかし、答えとして1を得ています。

+0

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

答えて

3

オーバーフローが発生しています。進数でmuplicationを考える:

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

溶液は、long long unsignedようなより大きなタイプを使用することである:サフィックスULLunsigned long long手段

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

を。

それがオンラインで作業を参照してください:ideone

+0

ありがとうございますが、私の数値がunsigned unsigned long int num = 4294967295のような整数で格納されている場合は – mainajaved

0

あなたの状態をあなたの質問にあなたが最大intはあなたがunsigned int型を使用している場合は、それよりも大きな数値を格納することができないことを意味することに4294967295と同じであることを知っています。

ので、あなたはULとあなたの数字をサフィックスのみ必要とするとき、符号なし [source] 64ビットUNIXシステム上の

Cのlong型が18,446,744,073,709,551,615まで保存:4294967295UL

をあなたはその後、64ビットのUNIXシステムを使用していない場合long long unsigned intと接尾辞はLLとなります。

+0

ありがとうalot sir \t 私の数値がunsigned 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); 
} 
[あなたは符号なしlong long int型をprintfの方法を教えてください](の
+0

ありがとうございますが、私の数値がunsigned unsigned long int num = 4294967295のような整数でストアされている場合は – mainajaved

+0

@mainajaved私は私のコメントを更新しました – mloskot

+0

大変ありがとうございます – mainajaved

関連する問題