0

この行printf ("Random[%d]= %u\n", i, rand ());はほとんどが 1 ビットのランダムな整数を生成しますが、printf("Random[%d]= %u\n", i, rand ()%1000000);を実行すると 6 桁の int が生成され、

10 桁の int を生成しようとすると、「警告: 形式 '%u' は 'unsigned int' 型の引数を期待していますが、引数 3 には 'long long int' 型 [-Wformat] があります」というエラーが発生します。

ランダムな10ビットの符号付き整数を生成する方法はありますか???

4

2 に答える 2

1

int32 には収まりません (プラットフォームをチェックして、どのようintに定義されているかを確認してください)

unsigned int32 では、最大値は 2^32 = 4,294,967,296 です。だからあなたがするときrand % 10000000000、それ10000000000longそう%です演算として計算されlongます(そのようなタイプの結果を与えます)

于 2013-10-25T12:16:15.617 に答える
1

「long long」または「unsigned long long」を明示的または暗黙的に printf に渡した可能性があるため、警告が表示されますが、これについては後で詳しく説明します。

10 桁の乱数を生成するには、64 ビットに切り替える必要があります。

unsigned long long randomvalue;
randomvalue = random();
randomvalue <<= 16; // just picked 16 at random
randomvalue ^= random();  // you could also use + but not "or";
randomvalue %= 10000000000ULL;

long long表示される警告は、関数の 3 番目の引数としてtype の値を渡すためですが、printfまだ"%u"形式として使用しているためprintf、 type の値が期待されますunsigned int

警告を消すには、形式を に変更します"%lld"

64 ビット プラットフォームでも、これまでのところ最大 32 ビットである an を2147483647返すrandため、10 桁の数値を作成するのには役立ちません。int価値はどこ2147483647から来るのですか?符号付き 32 ビット整数の場合は正の最大値。

于 2013-10-25T12:15:43.273 に答える