从unsigned int转换为float时出错

用户名

背景:我在记录中有一些元素,其中某些元素可以是float,unsigned int或unsigned long long。因此,尽管我使用float作为公共值从读取这些元素的函数中返回。

但是,我在从unsigned int转换为float时看到了这个奇怪的错误。在打印值时,它会更改。我该如何避免呢?我不应该从该函数返回float吗?

#include <iostream>
#include <limits>
using namespace std;
int main()
{
  unsigned int  myU = numeric_limits<unsigned int>::max();
  cout<<" myU is "<<myU<<'\n'; //correct
  float myF = (float) myU;
  cout<<" back To Long "<<(unsigned long long ) myF<<'\n'; //error?
  cout<<" back To unsigned int "<<(unsigned int ) myF<<'\n'; //error?
  cout<<" to Float Without Fixed "<<(float) myU<<'\n';//not clear, so have to use fixed
  cout<<" to Float With Fixed "<<fixed<<(float) myU<<'\n';//error?
  cout<<" difference "<<myF-myU<<'\n'; //error?
  cout<<" myU+32 "<<myU+32<<'\n'; //-1+32=31 ==> understandable
}

使用gcc 4.6.3的输出:

 myU is 4294967295
 back To Long 4294967296
 back To unsigned int 0
 to Float Without Fixed 4.29497e+09
 to Float With Fixed 4294967296.000000
 difference 1.000000
 myU+32 31
普亚

4294967295float (32-bit IEEE 754)被表示为如下:

0       10011111      00000000000000000000000
sign    exponent      mantissa
(+1)    (2^32)        (1.0)

将其转换回整数(在这种情况下为long)的规则是:

sign * (2^exponent) * mantissa

结果将4294967296是适合long long您的合适大小,但太大而无法容纳,unsigned int因此您可以0进行unsigned int转化。

注意,问题是与浮动例如表示大量的限制42949672954294967200两者都表示当它们被存储作为浮子相同的比特。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从unsigned long long转换为unsigned int

来自分类Dev

将图像转换为 MNIST 格式时出现 unsigned int 溢出错误

来自分类Dev

从`int`转换为`unsigned char`

来自分类Dev

如何在C ++中将float转换为unsigned int?

来自分类Dev

将char [2]转换为unsigned short时出错?

来自分类Dev

从double转换为unsigned int时得到错误的结果

来自分类Dev

自动将int转换为unsigned int

来自分类Dev

将unsigned int拆分为unsigned char []时出错

来自分类Dev

如何将unsigned int转换为unsigned char数组

来自分类Dev

如何在C中将unsigned char *转换为unsigned int *?

来自分类Dev

无法从“ unsigned int *”转换为“ LPDWORD”

来自分类Dev

将QString转换为unsigned short int

来自分类Dev

从unsigned int转换为uint16_t的转换错误

来自分类Dev

C ++需要将int类型转换为unsigned int

来自分类Dev

解决了“警告:从'int'转换为'long unsigned int'的问题”

来自分类Dev

将unsigned long long转换为float并失去精度

来自分类Dev

将float *或其他指针转换为unsigned char *

来自分类Dev

C ++中unsigned int与unsigned short的区别

来自分类Dev

memcpy 从 unsigned char * 到 unsigned int

来自分类Dev

如何在Swift中将Int强制转换为unsigned short

来自分类Dev

将Const char *转换为Unsigned long int-strtoul

来自分类Dev

将带符号的char转换为C中的unsigned int

来自分类Dev

错误:从'...'转换为'unsigned int'会失去精度[-fpermissive]

来自分类Dev

将4个字节转换为unsigned int

来自分类Dev

将带符号的char转换为C中的unsigned int

来自分类Dev

无法将boost :: lambda :: ...转换为long long unsigned int

来自分类Dev

如何将const unsigned short转换为unsigned short?

来自分类Dev

我可以将unsigned char *强制转换为unsigned int *吗?

来自分类Dev

如何在C ++中将unsigned int转换为两个unsigned short?

Related 相关文章

  1. 1

    从unsigned long long转换为unsigned int

  2. 2

    将图像转换为 MNIST 格式时出现 unsigned int 溢出错误

  3. 3

    从`int`转换为`unsigned char`

  4. 4

    如何在C ++中将float转换为unsigned int?

  5. 5

    将char [2]转换为unsigned short时出错?

  6. 6

    从double转换为unsigned int时得到错误的结果

  7. 7

    自动将int转换为unsigned int

  8. 8

    将unsigned int拆分为unsigned char []时出错

  9. 9

    如何将unsigned int转换为unsigned char数组

  10. 10

    如何在C中将unsigned char *转换为unsigned int *?

  11. 11

    无法从“ unsigned int *”转换为“ LPDWORD”

  12. 12

    将QString转换为unsigned short int

  13. 13

    从unsigned int转换为uint16_t的转换错误

  14. 14

    C ++需要将int类型转换为unsigned int

  15. 15

    解决了“警告:从'int'转换为'long unsigned int'的问题”

  16. 16

    将unsigned long long转换为float并失去精度

  17. 17

    将float *或其他指针转换为unsigned char *

  18. 18

    C ++中unsigned int与unsigned short的区别

  19. 19

    memcpy 从 unsigned char * 到 unsigned int

  20. 20

    如何在Swift中将Int强制转换为unsigned short

  21. 21

    将Const char *转换为Unsigned long int-strtoul

  22. 22

    将带符号的char转换为C中的unsigned int

  23. 23

    错误:从'...'转换为'unsigned int'会失去精度[-fpermissive]

  24. 24

    将4个字节转换为unsigned int

  25. 25

    将带符号的char转换为C中的unsigned int

  26. 26

    无法将boost :: lambda :: ...转换为long long unsigned int

  27. 27

    如何将const unsigned short转换为unsigned short?

  28. 28

    我可以将unsigned char *强制转换为unsigned int *吗?

  29. 29

    如何在C ++中将unsigned int转换为两个unsigned short?

热门标签

归档