わかりました、これは奇妙な問題です:
- 私は
unsigned long long
変数を使用しています(long
同じ効果で変数を使用しました) - 64 ビット整数を格納できるようにする必要
sizeof
があります ( 8 を返しますが、これで問題ありません)。
1<<63
ただし、 のような値に移動して単純なビット演算を実行しようとすると、奇妙なことに、負の値を取得しているように見えます。なぜですか?
私のテストコード:
unsigned long long c = 0;
c |= 1l << 56; printf("c = %lld\n",c);
c |= 1l << 63; printf("c = %lld\n",c);
出力:
c = 72057594037927936
c = -9151314442816847872
補足:
c = 1l<<63
もちろん直接やっても同じです。- すべてのテストは Mac OS X 10.6 で行われ、Apple の LLVM Compiler 3.0 を使用してコンパイルされました
助言がありますか?