• ベストアンサー

フロート演算について

ULARGE_INTEGER i64Total; GetDiskFreeSpaceEx(・・・ sprintf( text, "全体容量:%f Gbyte", (float)i64Total.QuadPart/(1024*1024*1024)); 以上のコードではサイン付きの変数でないためエラーになりました。 サイン無しの変数をサイン付きに変換する方法を教えてください。 最終的には、全体容量を小数点以下も表示したいのです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

i64Total.QuadPartはULONGLONGですから、符号付にしたいならLONGLONGにキャストすればいいでしょう。 (double)(LONGLONG)i64Total.QuadPart とすればエラーにならないはずです。

7777777v
質問者

お礼

m-take0220さん 簡単にできました。 助かりました、ありがとうございました。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

そちらで #include <stdio.h> #include <windows.h> int main() { ULONGLONG x = 1; double y = (double)x; printf("%f\n", y); return 0; } はコンパイルできますか?

7777777v
質問者

補足

ULONGLONG x = 1; double y = (double)x; printf("%f\n", y); これをコンパイルしたところ やはり 'unsigned__int64'から'double'への変換はインプリメントされていません。'signed__64'を使用します。 のメッセージがでました。 ご指導ありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「サイン付きの変数でないためエラーになりました」ってどういうことなんだろう. そんなメッセージが出たのかなぁ....

7777777v
質問者

補足

VC++のコンパイル時の実際のエラーメッセージは以下の通りです。 'unsigned__int64'から'double'への変換はインプリメントされていません。'signed__64'を使用します。 よろしくお願いします。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

signed と unsinged のこと? 1024U と整数にUを付けるとunsinged int になります。 それよりは、 この場合なら (float)i64Total.QuadPart/(1024F*1024F*1024F) と1024をfloatにする方がいいような。 また、特に理由が無いのなら、 floatよりはdoubleの方がいいと思います。 その場合は (double)i64Total.QuadPart/(1024.0*1024.0*1024.0)

7777777v
質問者

補足

コンパイル時の実際のエラーメッセージは次のようになっていました。 'unsigned__int64'から'float'への変換はインプリメントされていません。'signed__64'を使用します。 floatの変数は正負の符号付きの変数である必要があるようです。 回答頂いた >1024U と整数にUを付けるとunsinged int になります。 これでは符号付きにはなりません。 >と1024をfloatにする方がいいような。 これも構文エラーのエラーメッセージがでます。 >また、特に理由が無いのなら、 floatよりはdoubleの方がいいと思います。 この場合も 'unsigned__int64'から'double'への変換はインプリメントされていません。'signed__64'を使用します。 のエラーメッセージがでます。 結果として アンサインのi64Total.QuadPart自体を64ビットのサイン付き変数に変換する以外に方法はないように思います。 よろしくお願いします。

関連するQ&A