iphone:浮动转换为无符号整数如果它们是负数则设置为0?

mat*_*att 7 iphone floating-point casting

试试看:

volatile float bob = -344.0f;
unsigned int fred = (unsigned int)bob;

printf("%d\n",fred);
Run Code Online (Sandbox Code Playgroud)

输出将为0.

很明显我期待它就好像我已经从一个带符号的int转换为一个未编译的int(它确实包装并在iphone上按预期运行)

我们假设它与浮点设置有关.

有任何想法吗?

Pau*_*l R 11

这是预期的 - 将负浮点数转换为unsigned int会导致未定义的行为(UB).如果你想让值环绕(也就是UB,BTW),那么你需要首先转换为(signed)int,然后转换为unsigned int.理想情况下,你根本不应该依赖UB,找到一种更好的方法来做你需要做的事情.

  • @matt:因为你依赖于未定义的行为 (4认同)
  • @matt:如果你期望int为0,这对于那些编译器来说是*问题,这与期望它包装一样合理.这是未定义行为的问题:你不能合理地期望任何特定的事情发生.它可以环绕,它可以转到0,它可以向你的雇主发送暗示性的电子邮件 - 它完全未定义它将做什么. (2认同)
  • @matt,只是因为有直观的结果并不意味着行为是由标准定义的.特别是,"明显的"转换实际上与有符号整数类型中的相同值的转换完全不同,因此可以肯定地看到为什么实现可能更喜欢返回0而不是不可移植且可能混淆的结果.无论哪种方式,它都是合理的并且符合要求,但是一种方式,它也是不一致的而不是简单地未实现的. (2认同)