0

ここにいくつかのコードがあります。

long long bitmap2 = 1;
printf("%d\n", bitmap2 & 1);

出力は 0 ですが、期待しているのは 1 です。これを修正するにはどうすればよいですか? (1 の代わりに 1LL を試し、long long の代わりに uint64_t を試しました。どちらも同じ答えの 0 を返しました。)

4

2 に答える 2

2

現在表示されているのは未定義の動作です。フォーマット指定子と引数が一致していることを確認する必要があります。したがって、次のいずれかを使用します。

printf("%lld\n", bitmap2 & 1);
printf("%d\n", (int)(bitmap2 & 1));

の完全なドキュメントについては、たとえばhttp://en.cppreference.com/w/c/io/fprintfprintfを参照してください。

printfただし、ほとんどのコンパイラは、書式文字列と指定した引数の型が一致しない場合に警告を発します。たとえば、-Wallフラグを使用して GCC でコードをコンパイルすると、次のようになります。

warning: format '%d' expects type 'int', but argument 2 has type 'long long int'
于 2013-03-18T22:11:15.867 に答える
0

長く長く印刷したい場合はprintf("%d\ll", bitmap2 & 1)代わりに使うといいと思います。printf("%d\n", bitmap2 & 1)

于 2013-03-18T22:10:45.057 に答える