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联合的重点是什么?
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)
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |