This question already has answers here:
Overflowing of Unsigned Int
(3个答案)
C/C++ unsigned integer overflow
(3个答案)
3年前关闭。
对于不支持64位算术的编译器,存在ULARGE_INTEGER union。
如果最后一行的加法溢出,下面的代码会发生什么?
相关问题:
What is the point of the ULARGE_INTEGER union?
...但是,如今哪些编译器仍不支持64位整数?自2011年以来,C++标准就已要求它们,而自1999年以来,C标准就已要求它们。所以,您真正想要的是:
(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/