首页 >后端开发 >C++ >C 和 C 中的陷阱表示形式是什么,相同大小的浮点数及其指针是否共享相同的二进制表示形式?

C 和 C 中的陷阱表示形式是什么,相同大小的浮点数及其指针是否共享相同的二进制表示形式?

DDD
DDD原创
2024-12-18 22:45:20714浏览

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. 两个变量(一个浮点型和一个指向浮点型的指针)如果大小相同,是否具有相同的二进制表示形式?

答案:

1。陷阱表示:

在 C 中,陷阱表示是一种位模式,适合类型的大小,但如果用作该类型的值,则会导致未定义的行为。任何类型都不需要具有陷阱表示,但唯一保证不具有陷阱表示的类型是 unsigned char。

陷阱表示的一个示例是浮点类型中的信号 NaN。这些模式在 C99 中未定义。

2。对 C 的适用性:

虽然问题没有提到 C ,但值得注意的是陷阱表示的概念也适用于 C。

3.浮点和指针的二进制表示:

下面提供的代码表现出未定义的行为:

float f = 3.5;
int *pi = (int*)&f;

但是,此行为与陷阱表示无关。要获取与浮点数具有相同位模式的整数值,请使用以下代码:

int extract_int(float f)
{
    union { int i; float f; } u;
    u.f = f;
    return u.i;
}

此代码在 C99 中表现出未指定的行为,这意味着标准没有定义生成的确切整数值,但它保证获得有效的整数值。因此,浮点数的二进制表示形式和使用联合获得的整数不能保证相同。

以上是C 和 C 中的陷阱表示形式是什么,相同大小的浮点数及其指针是否共享相同的二进制表示形式?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn