This question already has answers here:
Overflowing of Unsigned Int

(3个答案)



C/C++ unsigned integer overflow

(3个答案)


3年前关闭。




对于不支持64位算术的编译器,存在ULARGE_INTEGER union

如果最后一行的加法溢出,下面的代码会发生什么?
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?

最佳答案

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.

关于c++ - 在结构上溢出的整数加法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45539945/

10-13 06:41
查看更多