3

次のアルゴリズムでランダムな整数を作成しています。

int random;

int i;
for (i = 0; i < RANDOM_COUNT; i++) {
    random = (((int) rand() << 0) & 0x0000FFFFd)
            | (((int) rand() << 16) & 0xFFFF0000d);
    fprintf(outputFile, " %d\n", random);
}

次の警告が表示されます。

warning: integer constant is too large for "long" type

この行で:

| (((int) rand() << 16) & 0xFFFF0000d);

GCC3.4.3を使用してコードをコンパイルしています。

操作のどの部分が警告をトリガーしているのか誰かが知っていますか?

4

1 に答える 1

5

(((int) rand() << 16) & 0xFFFF0000d);操作[ ]のどの部分が警告をトリガーしているのか誰か知っていますか?

はい、0xFFFF0000d36ビットのサイズなのでです。この数はに等しいことに注意してください0xFFFF0000D。あなたはおそらく意味し0xFFFF0000ました。

同様に、0x0000FFFFdはに等しい0x0000FFFFD。あなたはおそらく意味し0x0000FFFFました。

于 2012-10-08T22:44:18.987 に答える