に異なっている私はこのようなコード・スニペット(up.cpp)を有する:64ビット整数へのポインタを変換する、なぜ結果は32ビット・64ビットプラットフォーム
#include <stdio.h>
typedef unsigned long long Uint64;
int main()
{
void *p = (void*)0xC00;
Uint64 u64 = (Uint64)p;
printf("{%llx}\n", u64);
return 0;
}
32とそれをコンパイルビットのgcc 4.8.1、私は出力を得る:
64ビットGCC 4.8.1とそれをコンパイル{ffffffffc00}
、私は出力を得る:
{c00}
はい、64ビットの1は、3を与えます2ビット値。 gcc 4.8.1はopenSUSE 13.1のものです。
私は、Visual C++ 2010のx86 &のx64コンパイラ(ビットコードの変更、__int64
と%I64x
)でそれを試みたが、驚くべきは、同じ結果を得ます。
もちろん、私はを両方のx86 & x64で入手しようと考えています。しかし、なぜそのような違いがありますか?
"ll"を使用し、 "llu"を使用していないためです。 –
@barakmanos:彼は '%llx'を使用しています。ここで' x'は符号なしと16進を意味します。 –
しかし、最終的に出力フレーバーを制御したいのですが、 "%llx"は私に 'abcdef'を与え、 ''%llX "'は 'ABCDEF 'を与えます。 –