浮動小数点数のビット演算
C/C のビット演算は、数値の実際の値ではなく、数値表現を操作します。ただし、浮動小数点数には、この言語で定義されたビットレベル表現がありません。
コンパイラ エラー: & オペランドが浮動小数点ではありません
ビット単位の AND を実行しようとしましたfloat 変数 a に対する (&) 演算は、「& オペランドには整数型が必要であり、float に適用できないため、失敗します。 a を an にキャストすると、 int a = (int) 1.4123; などの整数では、演算は可能ですが、四捨五入された数値の整数表現に対してビット単位の AND が実行されます。
int to void キャストと浮動小数点数to void Cast
整数は void* にキャストできます。一方、浮動小数点数は、「生の」メモリ内の値を表します。そのため、浮動小数点数は、明確に定義された基礎となるビット表現を持たないため、確実に void*.
にキャストできません。浮動小数点ビット内容の分析
浮動小数点数のビット内容を分析するには、共用体を使用して浮動小数点数と表現をマージします。ビット単位の演算をサポートする型:
union { float f_value; unsigned int u_value; } number; number.f_value = 1.4123; unsigned int bitmask = (1 << 3); number.u_value &= bitmask; // Perform bitwise AND on the integer representation
あるいは、C では、浮動小数点オブジェクトを符号なし文字の配列として再解釈できます:
float f = 5.0; unsigned char *c = reinterpret_cast<unsigned char *>(&f); // Inspect bit content from c[0] to c[sizeof(f) - 1]
結論
浮動小数点数には定義されていないため、ビット演算を直接実行することはできません。ビットレベル表現。代わりに、共用体や再解釈などの方法を使用して、基礎となるメモリのビット内容を分析できます。
以上がC/C で浮動小数点数に対してビット単位の演算を直接実行できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。