在运行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;
有人能说清楚为什么会这样吗?
答案 0 :(得分:-1)
[conv.fpint] / 1 浮点类型的prvalue可以转换为整数类型的prvalue。转换截断;也就是说,丢弃小数部分。如果截断值不能,则行为未定义 在目的地类型中表示。
强调我的。 DBL_MAX
大概在2 ^ 1024左右,而unsigned int
可能在2 ^ 32时达到最高。