6

このプログラムは、WindowsXPマシンのVC++6.0で記述されています。

__int64変数を-2500000000に直接設定しようとすると、32ビット値に切り捨てられ、2の補数が取得されます。

__int64 testval;
testval = -2500000000;

この時点で、testvalは1794967293(110 1010 1111 1101 0000 0111 0000 0000バイナリ)に等しくなります。

変数を2500000000に設定してから負の値を掛けると、次のように機能します。

__int64 testval;
testval = 2500000000;
testval *= -1;

変数testvalは-2500000000(1001 0101 0000 0010 1111 1001 0000 0000バイナリ)に等しくなります。

何か案は?ありがとう。

4

3 に答える 3

10

新しいコンパイラを入手してください。VC6標準への準拠は非常に貧弱です。

i64VC6では、次のように、のサフィックスを試してください

__int64 toobig = -2500000000i64;

ドキュメントが見つかりました!

于 2011-02-18T21:05:49.713 に答える
9

コンパイラは定数2500000000を32ビットの数値として扱います。定数の末尾にlong intanを追加して、それをaとして扱うように明示的に指示する必要があります。LLしたがって、代わりに試してください。

testval = -2500000000LL;

更新:コンパイラはこれをサポートしておらず、VC6で立ち往生しているため、代わりに、次のように2つの32ビット数の積から得られる値に分割してみてください。

testval = -250000;
testval *= 10000;
于 2011-02-18T20:58:40.243 に答える
2

正しい構文は-2500000000LLです。それが機能しない場合は、新しいコンパイラを入手してください。

于 2011-02-18T21:16:25.837 に答える