ホームページ >バックエンド開発 >C++ >C と C のトラップ表現とは何ですか?また、同じサイズのフロートとそのポインタは同じバイナリ表現を共有しますか?

C と C のトラップ表現とは何ですか?また、同じサイズのフロートとそのポインタは同じバイナリ表現を共有しますか?

DDD
DDDオリジナル
2024-12-18 22:45:20725ブラウズ

What are Trap Representations in C and C  , and Do Identical-Sized Floats and Their Pointers Share the Same Binary Representation?

トラップ表現

質問:

  1. 「トラップ表現」とは何ですか? C では?
  2. これは C に適用されますか? ?
  3. 浮動小数点数と浮動小数点へのポインタの 2 つの変数は、サイズが同じであれば同じバイナリ表現になりますか?

答え:

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。