结构上溢出的整数加法

Integer addition with overflow on a struct

本文关键字:整数 溢出 结构上      更新时间:2023-10-16

对于不支持64位算术的编译器,有一个ULARGE_INTEGER并集。

如果最后一行的添加溢出,下面的代码会发生什么情况?

ULARGE_INTEGER u;
u.LowPart = ft->dwLowDateTime;
u.HighPart = ft->dwHighDateTime;
u.LowPart += 10000; //what if overflow?

相关问题: ULARGE_INTEGER联盟的意义何在?

ULARGE_INTEGER

由两个无符号值组成。 无符号值保证是圆形的,因此在某种意义上它们不会"溢出"。

如果确实发生环绕,u.LowPart最终将少于 10,000。 您可能想要的是:

u.LowPart += 10000;
if (u.LowPart < 10000) u.HighPart++;

。但是现在哪个编译器仍然不支持 64 位整数? 自 2011 年以来,它们一直受到 C++ 标准的要求,自 1999 年以来一直受到 C 标准的要求。 所以你真正想要的是:

u.QuadPart += 10000;  // Forget about legacy compilers that doen't support 64 bits.