107得票6回答
(A + B + C) ≠ (A + C + B)且编译器重新排序

将两个32位整数相加可能导致整数溢出:uint64_t u64_z = u32_x + u32_y; 如果将32位整数之一先转换或加到64位整数中,则可以避免此溢出。uint64_t u64_z = u32_x + u64_a + u32_y; 然而,如果编译器决定重新排列加法:uint64_...

99得票13回答
在C/C++中检测有符号整数溢出

乍一看,这个问题可能看起来像是如何检测整数溢出?的重复,但实际上它有明显的不同。 我发现,虽然检测无符号整数溢出非常简单,但检测C/C ++中的有符号溢出实际上比大多数人想象的要困难得多。 最明显但很幼稚的方法可能是:int add(int lhs, int rhs) { int sum...

98得票3回答
在C++中,带符号整数溢出仍然是未定义行为吗?

我们知道,有符号整数溢出是未定义的行为。但在 C++11 的 cstdint 文档中有一些有趣的内容: 有符号整数类型,宽度分别为 8、16、32 和 64 位,没有填充位,并且对于负值使用2的补码(仅当实现直接支持该类型时提供) 查看链接 我的问题是:由于标准明确规定对于 int8...

95得票15回答
捕获并计算两个大整数相乘时的溢出问题

我正在寻找一种高效(可选择标准、优雅和易于实现)的解决方案来乘以相对较大的数字,并将结果存储到一个或多个整数中: 假设我有两个声明为64位整数的变量:uint64_t a = xxx, b = yyy; 当我执行 a * b 时,如何检测操作结果是否溢出,并在这种情况下将进位存储在某个地方...

90得票5回答
Java Integer compareTo() - 为什么要使用比较而不是减法?

我发现java.lang.Integer的compareTo方法实现如下:public int compareTo(Integer anotherInteger) { int thisVal = this.value; int anotherVal = anotherInteg...

86得票12回答
在循环中,整数溢出何时变为未定义行为?

这是一个示例,用来说明我的问题,其中涉及了一些更加复杂的代码,我无法在这里发布。#include <stdio.h> int main() { int a = 0; for (int i = 0; i < 3; i++) { print...

85得票4回答
在线IDE上程序表现异常

我找到了以下C++程序(源代码): #include <iostream> int main() { for (int i = 0; i < 300; i++) std::cout << i << " " << i...

85得票9回答
为什么要使用整数而不是长整数?

我经常看到与 vba 相关的 Overflow 错误的问题。 我的问题是为什么要使用 integer 变量声明,而不是将所有数字变量(除了 double 等)定义为 long? 除非你正在执行像 for 循环这样的操作,在这种情况下你可以保证值不会超过 32,767 的限制,否则是否使用 ...

81得票6回答
C#中的整型数据类型没有溢出异常?

我在Project Euler中遇到了一个奇怪的问题,与10号问题有关。任务是计算小于两百万的所有质数之和。 我使用了int类型的变量作为求和结果,我的算法得出了答案,但当我将它粘贴验证答案时,发现它是错误的。 后来发现,结果太大无法容纳在int类型中,但这难道不应该导致溢出错误之类的吗?...

79得票14回答
如果32位整数溢出,我们可以使用40位结构体代替64位长整型吗?

如果说一个32位整数溢出了,我们是否可以使用一些40位类型来满足只需要在2的40次方范围内的需求呢?这样,我们每个整数可以节省24(64-40)位,而不是将 int 升级为 long。 如果可以,怎么做呢? 我必须处理数十亿数据,空间是更大的限制因素。