1

次のコードスニペットで期待するように、long long値が出力されないのはなぜですか?

#include <stdio.h>

int main()
{
    int x = 1363177921;
    long long unsigned y = x * 1000000;
    printf("y: %llu\n", y); // Why is 1363177921000000 not printed?
    return 0;
}
4

3 に答える 3

7

間違っているのは印刷ではありません。次の整数オーバーフローがあります。

long long unsigned y = x * 1000000;

それを次のように変更します。

long long unsigned y = x * 1000000ull;
于 2013-03-13T11:41:32.397 に答える
4

あなたxは ではなくlong long、そうでもないため、乗算後1000000にのみ変換されます。long long

そうすれば、あなた1000000ULLが望むものを手に入れることができます。

于 2013-03-13T11:42:04.453 に答える
1

問題は、xがintであり、1000000が長くなることです。これで、コンパイラは2 longを乗算していたのでそれらを乗算し、結果はlonglongに変換されます。

解決するには、xまたは100000の前に暗黙の型キャストを追加するか、以下に示すようにxをlongに変換します。

 #include <stdio.h>

 int main()
 {
         int x = 1363177921;
         long long unsigned y = (long long )x * 1000000;
         printf("y: %llu\n", y); // Why is 1363177921000000 not printed?
         return 0;
 }

http://codepad.org/rLW8fGTA

于 2013-03-13T11:45:29.703 に答える