结构上溢出的整数加法
Integer addition with overflow on a struct
对于不支持64位算术的编译器,有一个ULARGE_INTEGER并集。
如果最后一行的添加溢出,下面的代码会发生什么情况?
ULARGE_INTEGER u;
u.LowPart = ft->dwLowDateTime;
u.HighPart = ft->dwHighDateTime;
u.LowPart += 10000; //what if overflow?
相关问题: ULARGE_INTEGER联盟的意义何在?
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.
相关文章:
- 整数溢出,最大值为 pow(10,19)
- 模函数,避免C++整数溢出
- 优化正在杀死我在 clang 6 中的整数溢出检查
- 从双精度转换为整数的显式类型是否始终检查整数溢出?
- 运行时错误:有符号整数溢出:964632435 * 10 无法在类型 'int' 中表示
- 我很难理解这些关于检测整数溢出的评论
- 检测 32 位整数溢出
- 如何在没有整数溢出的情况下找到n%(k*k)
- C 中俄罗斯农民算法中的整数溢出
- 检查Android NDK COD中的整数溢出
- 对于特定情况的整数溢出似乎是由整数溢出引起的错误
- 如何修复整数溢出警告
- 整数溢出 C++ 即使使用“无符号长整型”也是如此
- 整数溢出是否会影响其他变量
- 为什么功能不给整数溢出
- 有符号整数溢出、内部函数和未定义的行为
- 整数溢出不会发生:它们从0重新启动
- 以下程序中最大 int 1000 000(在 int 范围内)的整数溢出
- 为什么Turbo C Wraparound每次签名的整数溢出,尽管签名的整数溢出是不确定的
- 编译器是否有可能检测整数溢出或其他数据类型溢出的可能性