[gcc]long long intの値をprintfで表示させる

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の本格的活用法 高機能コンパイラのオプションを一つ一つていねいに解説
コンパイラ―原理・技法・ツール

関連記事

コメントを残す

メールアドレスが公開されることはありません。