【问题标题】:Type conversion with pointer C [duplicate]使用指针 C 进行类型转换 [重复]
【发布时间】:2021-08-25 11:46:39
【问题描述】:

这是我考试中的一道题。我不明白为什么这个程序的结果是:0 0 ac 40。大家可以给我解释一下吗? 这个答案在Window上。与其他操作系统(如 Linux 或 Mac)有什么不同?我也想知道。

谢谢大家。

int main ()
{
   float a = 5.375;
   char *p;
   
   p = (char*)&a;

   for(int i=0; i <= 3; i++)
      printf("%x ", (unsigned char)p[i]);
   
   return 0;
}

【问题讨论】:

  • “这是我考试中的一道题。” !? :-( 你必须知道float的内部表示吗?(还有字节序...)。
  • 您需要查看IEEE754 才能更好地理解它
  • 我很确定你的老师正在解释它。当他这样做时,您可能有更重要的事情要做。

标签: c pointers type-conversion


【解决方案1】:

我不是 C 专家,但我这样理解:float 变量是 4 个字节(通常,为了确保您可以调用 sizeof(float)),char 是 1 个字节。当您创建一个浮点数时,您分配了 4 个字节,其二进制值等于5.375。然后,您创建了一个指向它的 char 指针 - 它会拆分二进制值。

你在这个问题中必须做的:

  • 以二进制形式(4 字节,32 位)查找值 5.375
  • 将该值拆分为每个字节(每个 8 位)
  • 检查每个字节对应的无符号字符值

我不完全确定结果是否与 Windows 或其他系统不同 - 我会检查 little-endians 系统是否与执行相同过程的 big-endians 不同。

我希望这能帮助你理解它。

【讨论】:

  • sizeof(float) 和小或大的 Endian 问题。
  • 结果会因操作系统而异,但仅在字节序方面 - 其他一切仍应符合 IEEE754 标准。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 2020-01-15
相关资源
最近更新 更多