浮動小数点値を使用したビット単位の演算
C/C では、ビット単位の演算は整数に対してのみ実行でき、浮動小数点に対しては実行できません。数字。これは、浮動小数点数がビット単位の演算と互換性のないバイナリ表現を使用しているためです。
たとえば、浮動小数点数 a に対して a = a & ( など) のビット単位の演算を実行しようとすると、 1
a = (int)a & (1
値を void ポインターにキャストする別の試行、a = (void*)a & (1 << 3)も無効です。これは、ビット演算子 & のオペランドの型がそのオペランドの型と同じである必要があるためです。 void* は int よりも大きな表現を持ちますが、ビット単位の演算のオペランドとして使用することはできません。
浮動小数点数に対してビット単位の演算を実行する唯一の方法は、生のデータのビット内容を分析することです。値によって占有されるメモリ。これは共用体を使用して実行できます:
union FloatToInt { float f; int i; }; FloatToInt fi; fi.f = 1.4123; fi.i = fi.i & (1 << 3);
以上がC/C で浮動小数点数に対してビット単位の演算を実行できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。