重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

ULARGE_INTEGER i64Total;
GetDiskFreeSpaceEx(・・・
sprintf( text, "全体容量:%f Gbyte", (float)i64Total.QuadPart/(1024*1024*1024));

以上のコードではサイン付きの変数でないためエラーになりました。
サイン無しの変数をサイン付きに変換する方法を教えてください。

最終的には、全体容量を小数点以下も表示したいのです。

A 回答 (4件)

i64Total.QuadPartはULONGLONGですから、符号付にしたいならLONGLONGにキャストすればいいでしょう。



(double)(LONGLONG)i64Total.QuadPart

とすればエラーにならないはずです。
    • good
    • 0
この回答へのお礼

m-take0220さん

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

お礼日時:2013/07/11 11:26

そちらで



#include <stdio.h>
#include <windows.h>

int main()
{
ULONGLONG x = 1;
double y = (double)x;
printf("%f\n", y);
return 0;
}

はコンパイルできますか?

この回答への補足

ULONGLONG x = 1;
double y = (double)x;
printf("%f\n", y);

これをコンパイルしたところ
やはり

'unsigned__int64'から'double'への変換はインプリメントされていません。'signed__64'を使用します。

のメッセージがでました。

ご指導ありがとうございました。

補足日時:2013/07/11 11:32
    • good
    • 0

「サイン付きの変数でないためエラーになりました」ってどういうことなんだろう.



そんなメッセージが出たのかなぁ....

この回答への補足

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

よろしくお願いします。

補足日時:2013/07/11 08:48
    • good
    • 0

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)

この回答への補足

コンパイル時の実際のエラーメッセージは次のようになっていました。
'unsigned__int64'から'float'への変換はインプリメントされていません。'signed__64'を使用します。

floatの変数は正負の符号付きの変数である必要があるようです。

回答頂いた
>1024U と整数にUを付けるとunsinged int になります。
これでは符号付きにはなりません。

>と1024をfloatにする方がいいような。
これも構文エラーのエラーメッセージがでます。

>また、特に理由が無いのなら、 floatよりはdoubleの方がいいと思います。
この場合も
'unsigned__int64'から'double'への変換はインプリメントされていません。'signed__64'を使用します。
のエラーメッセージがでます。

結果として
アンサインのi64Total.QuadPart自体を64ビットのサイン付き変数に変換する以外に方法はないように思います。

よろしくお願いします。

補足日時:2013/07/11 09:12
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

今、見られている記事はコレ!