在结构上添加溢出的整数

Rol*_*and 2 c c++ windows winapi

对于不支持64位算术的编译器,有ULARGE_INTEGER联合.

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

ULARGE_INTEGER u;
u.LowPart = ft->dwLowDateTime;
u.HighPart = ft->dwHighDateTime;
u.LowPart += 10000; //what if overflow?
Run Code Online (Sandbox Code Playgroud)

相关问题: ULARGE_INTEGER联合的重点是什么?

Mar*_*ica 7

ULARGE_INTEGER由两个无符号值组成.无符号值保证包裹,因此在某种意义上它们不能 "溢出".

如果确实发生回绕,u.LowPart最终将小于10,000.你可能想要的是:

u.LowPart += 10000;
if (u.LowPart < 10000) u.HighPart++;
Run Code Online (Sandbox Code Playgroud)

...但是这些天编译器仍然不支持64位整数?它们自2011年起被C++标准所要求,并且自1999年以来一直是C标准.所以你真正想要的是:

u.QuadPart += 10000;  // Forget about legacy compilers that doen't support 64 bits.
Run Code Online (Sandbox Code Playgroud)