首页 > 解决方案 > int 和 float 之间的不兼容(关于哪些标准)

问题描述

我正在阅读有关严格别名并停止引用说:

对象的存储值只能由具有以下类型之一的左值表达式访问:

  • 与对象的有效类型兼容的类型。

首先,我认为 int 和 float 在大小方面是兼容的,因为 int 的大小等于 4 个字节,这与 float 的 thz 大小相同。

所以我想知道, int 和 float 关于什么不兼容?

谢谢你,对不起我的问题有点愚蠢:)

编辑:添加代码示例

#include <stdio.h> 

void f(void) {
  if (sizeof(int) == sizeof(float)) {
    float f = 0.0f;
    int *ip = (int *)&f;
    (*ip)++;
    printf("float is %f\n", f);
  }
}

标签: c++floating-pointintegernumbers

解决方案


“我认为 int 和 float 的大小是兼容的,因为 int 的大小等于 4 个字节,这对于 float 的 thz 大小是相同的。” 不符合“与对象的有效类型兼容的类型”。

所以我想知道, int 和 float 关于什么不兼容?

肯定有不一样的大小。即使尺寸相同,类型也可能在对齐需求上有所不同。对象的地址(不常见)int甚至可能与float. int *ip = (int *)&f;可能导致未定义的行为。

为了最好地将整数数据重新解释为浮点数据,首先需要一个明确的用例。


推荐阅读