有的是ULARGE_INTEGER 联合 https://msdn.microsoft.com/en-us/library/windows/desktop/aa383742(v=vs.85).aspx对于不支持 64 位算术的编译器。
如果最后一行的加法溢出,下面的代码会发生什么情况?
ULARGE_INTEGER u;
u.LowPart = ft->dwLowDateTime;
u.HighPart = ft->dwHighDateTime;
u.LowPart += 10000; //what if overflow?
相关问题:ULARGE_INTEGER 联合的意义是什么? https://stackoverflow.com/questions/14915752/what-is-the-point-of-the-ularge-integer-union
ULARGE_INTEGER
由两个无符号值组成。无符号值保证环绕,所以在某种意义上它们can't“溢出”。
如果绕一圈does occur, u.LowPart
最终将低于 10,000。您可能想要的是:
u.LowPart += 10000;
if (u.LowPart < 10000) u.HighPart++;
...但是现在哪个编译器仍然不支持 64 位整数? C++ 标准自 2011 年起就要求它们,C 标准自 1999 年起就要求它们。really想要的是:
u.QuadPart += 10000; // Forget about legacy compilers that doen't support 64 bits.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)