在结构上添加溢出的整数

时间:2017-08-07 05:30:52

标签: c++ c windows winapi

编译器ULARGE_INTEGER union不支持64位算术。

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

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

相关问题: What is the point of the ULARGE_INTEGER union?

1 个答案:

答案 0 :(得分:7)

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.