トラップ表現
質問:
答え:
1.トラップ表現:
C では、トラップ表現は型のサイズに適合するビット パターンですが、その型の値として使用すると未定義の動作が発生します。トラップ表現を持つ必要がある型はありませんが、トラップ表現を持たないことが保証されている唯一の型は unsigned char です。
トラップ表現の例は、浮動小数点型のシグナル NaN です。これらのパターンは C99 では未定義です。
2. C への適用性:
質問では C について言及していませんが、トラップ表現の概念は C にも同様に適用されることに注意してください。
3. Float と Pointer のバイナリ表現:
以下のコードは未定義の動作を示します:
float f = 3.5; int *pi = (int*)&f;
ただし、この動作はトラップ表現とは関係ありません。 float と同じビット パターンを持つ整数値を取得するには、次のコードを使用します。
int extract_int(float f) { union { int i; float f; } u; u.f = f; return u.i; }
このコードは C99 で未指定の動作を示します。つまり、標準では生成される正確な整数値が定義されていませんが、有効な整数値が取得されることを保証します。したがって、float のバイナリ表現と共用体を使用して取得された整数が同一であることは保証されません。
以上がC と C のトラップ表現とは何ですか?また、同じサイズのフロートとそのポインタは同じバイナリ表現を共有しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。