私は知っているように、私は4234967295がunsigned int
の中で最大の数字であることを知っています。私は試してみました:非常に大きな数字を表示
long unsigned int NUMBER = 4294967295 * 4294967295;
しかし、答えとして1を得ています。
私は知っているように、私は4234967295がunsigned int
の中で最大の数字であることを知っています。私は試してみました:非常に大きな数字を表示
long unsigned int NUMBER = 4294967295 * 4294967295;
しかし、答えとして1を得ています。
オーバーフローが発生しています。進数でmuplicationを考える:
0xffffffff * 0xffffffff == 0xfffffffe00000001
^^^^^^^^
only the last 32 bits are returned
溶液は、long long unsigned
ようなより大きなタイプを使用することである:サフィックスULL
はunsigned long long
手段
long long unsigned int NUMBER = 4294967295ULL * 4294967295ULL;
を。
それがオンラインで作業を参照してください:ideone
ありがとうございますが、私の数値がunsigned unsigned long int num = 4294967295のような整数で格納されている場合は – mainajaved
あなたの状態をあなたの質問にあなたが最大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
となります。
ありがとうalot sir \t 私の数値がunsigned unsigned long int num = 4294967295のような整数に格納されている場合は – mainajaved
はい、オーバーフローです。あなたがcを使用しているなら、私が知っていたような大きな数の乗算を行う簡単な方法はありません。たぶんあなたは自分で書く必要があります。実際には、そのような機能をサポートしている言語もあります。
乗算がオーバーフローします。
#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の方法を教えてください](の
ありがとうございますが、私の数値がunsigned unsigned long int num = 4294967295のような整数でストアされている場合は – mainajaved
@mainajaved私は私のコメントを更新しました – mloskot
大変ありがとうございます – mainajaved
可能重複http://stackoverflow.com/questions/2844/how-do-you-printf-an-unsigned-long-long- – mloskot