long long intで64bit整数値を格納した際に、その値をprintfで表示させる方法です。
普通に%dや%xで表示させようとしても、下位32bit分しか見てくれないので正しい値を表示させる事が出来ません
プログラム
#include <stdio.h> int main() { long long int a = (long long int)1 << 63; // NG: intとして表示 printf( "case1: %d\n", a ); // NG: 16進で表示 printf( "case2: %x\n", a ); } |
実行結果
case1: 0 case2: 0 |
このような場合は、%lldや%llxを使用すると、64bit分見てくれます。
#include <stdio.h> int main() { long long int a = (long long int)1 << 63; // long long intとして表示 (印字対象データの最上位ビットが立っているので負数とみなされる) printf( "case3: %lld\n", a ); // unsigned long long intとして表示 printf( "case4: %llu\n", a ); // 16進数で表示 printf( "case5: 0x%llx\n", a ); } |
実行結果
case3: -9223372036854775808 case4: 9223372036854775808 case5: 0x8000000000000000 |
実例で学ぶGCCの本格的活用法 高機能コンパイラのオプションを一つ一つていねいに解説
コンパイラ―原理・技法・ツール
関連記事
コメントを残す