0

ac プログラムには long long int 型の変数があり、値 0x7fffffffffffffff を格納しています。この値を 1024 * 4 で割ると、2251799813685247、つまり 0x7ffffffffffff になります。

ここで (1024 * 4) を乗算すると、結果は 0x7ffffffffffff000 になります。

long long unsigned int 型の変数にしても結果は変わりません。コードは 64 ビット マシンで実行されています。

結果が 0x7ffffffffffffff にならないのはなぜですか?

4

4 に答える 4

7

これを 4096 で割ると、12 ビットだけ右にシフトするだけです。つまり、最後の 12 ビットが失われます。

0x7fffffffffffffff becomes
0x7ffffffffffff

逆に乗算すると、左に 12 シフトするため、欠落しているビットは 0 で埋められます。

于 2013-11-14T08:24:38.573 に答える
1
echo "((15/4)*4)" | bc

結果は 15 ではありません

于 2013-11-14T09:06:45.720 に答える
0

その簡単な数学...

1024 * 4 * 0x7ffffffffffff = 0x7ffffffffffff000

于 2013-11-14T08:26:26.993 に答える