UINT One = 1;
LONG mylong = LONG(-1) * One;
LONGLONG mylonglong1 = LONG(-1) * One;
LONGLONG mylonglong2 = LONG(LONG(-1) * One);
mylong
,mylonglong1
およびmylonglong2
に格納される値は何ですか?intからlonglongへの危険な変換:警告なし?
mylong = 0xffffffff (ok)
mylonglong1 = 0x00000000ffffffff (why?)
mylonglong2 = 0xffffffffffffffff (ok)
私はmylonglong1
の結果を知って本当に驚いた、と何のコンパイル警告がないことをもっと驚い。
なぜLONGGLONGにLONGを割り当てると、その左側に0が埋め込まれていますか?実際のプロジェクトで何が起こった
は、関数のCFileを使用する際に問題となっている::)(シーク
virtual LONG Seek(LONG lOff, UINT nFrom);
は、ここで定義:https://msdn.microsoft.com/en-us/library/aa270542(v=vs.60).aspx 移行
virtual ULONGLONG Seek(LONGLONG lOff, UINT nFrom);
に
https://msdn.microsoft.com/library/b2eb5757-d499-4e67-b044-dd7d1abaa0f8.aspx#cfile__seekここで定義されました
移行後引数の変換lOff
が期待した結果を得ていなかったために動作しました。式(-1) * (UINT)1
で
あなたはゲームの推測サイトと混同しましたか?答えを知るには、コードを実行して値を印刷するだけです。 – user463035818
デバッガで実行するのはどうですか? – George
誰もがコンテンツの内容ではなく質問の形式について不平を言っていたので、私はそれを書き換えました。うまくいけば、現在のフォーマットに合っていて、通常の答えを引き付けるだろう。 – CompuChip