7

フロートが4バイトになるようにするためのクロスアーキテクチャの方法が必要です(32ビットウィンドウの場合と同様)。たとえば、私が作成している構造体では、4バイト長の整数値を確保する__int32代わりにを使用しています。int

フロートでこれを行うにはどうすればよいですか?__int32値を型に置き換えるだけでよいことはわかっています。ただし、64ビットシステムでフロートにキャストする場合、問題は発生しませんか?

4

2 に答える 2

10

フロートが4バイトになるようにクロスアーキテクチャの方法が必要です

int32_t浮動小数点値に類似したものはありません。

必要なことを達成するための唯一のクロスプラットフォームの方法は、ランタイムまたは静的アサートのいずれかを使用してテストすることです。

#include <cassert>
int main () {
    assert(sizeof(float) == 4);
    // If control reaches this line, then you've 
    // ensured that float is 4 bytes.


    // rest of your program goes here
}
于 2012-07-16T02:17:28.737 に答える
6

浮動小数点のデータサイズはCPUに関連付けられているため、これを行うための標準に準拠した方法はありません。標準(私の知る限り、浮動小数点をサポートするすべてのIEEE-754プロセッサが使用します)は、単精度浮動小数点値を4バイトとして定義しています。

標準的な言及がない理由は、Cの作成者は、標準が変更または更新された場合に、浮動小数点の特定の実装に縛られたくないためです。また、CPUが単精度および倍精度浮動小数点数のサイズと実装を決定するため、コンパイラーが関係することではありません。

あなたがそれについて心配しているなら、あなたはそれstatic_assertを確実にするためにaを使うことができますsizeof(float) == 4; しかし、これは私が想像できないような問題ではありません。もしそうなら、ケースバイケースで対処する必要があります(これは実際にはアーキテクチャごとになります)。

于 2012-07-16T02:16:23.710 に答える