将大双精度转换为无符号 int 期间堆栈损坏

Stack corruption during conversion of large double to unsigned int

本文关键字:堆栈 损坏 int 无符号 双精度 转换      更新时间:2023-10-16

在运行Visual c ++的Windows机器上,我发现以下代码行似乎通过调用名为__dtoui3的东西(此调用后一堆字节更改。具体来说,似乎DBL_MAX的值在内存中的随机位置连续打印两次(

double temp =  DBL_MAX;
unsigned int blissfullyUnaware = (unsigned int) temp;

但是,以下内容不会:

double temp =  0;
unsigned int blissfullyUnaware = (unsigned int) temp;

谁能阐明为什么会发生这种情况?

[conv.fpint]/1 浮点类型的 prvalue 可以转换为整数类型的 prvalue。转换蹦蹦跳跳;也就是说,小数部分被丢弃。如果截断的值不能 以目标类型表示。

强调我的。 DBL_MAX大约在 2^1024 左右,而unsigned int可能达到 2^32 的最高点。