47得票5回答
如何检测32位整数的整型溢出?

我知道这个话题已经被问了好几次,但我的问题是关于int类型的32位溢出。例如: 11111111111111111111111111111111 + 00000000000000000000000000000001 = 000000000000000000000000000000...

42得票4回答
有没有一些有意义的统计数据可以证明保持有符号整数算术溢出未定义是合理的?

C标准明确规定有符号整型溢出具有未定义的行为。然而,大多数CPU使用有定义的语义来实现有符号算术溢出(除了除法溢出: x / 0和INT_MIN / -1)。 编译器作者一直利用这种溢出的未定义性来添加更激进的优化,往往会以非常微妙的方式破坏传统代码。例如,这段代码可能在旧版的gcc和clan...

38得票2回答
在通过列表后向循环时出现“尝试减去溢出”的恐慌错误。

我正在编写一个循环方法,用于在列表中将索引向前或向后移动。以下代码用于向后循环:(i-1)%list_length 在这种情况下,i 的类型为 usize,表示它是无符号的。如果 i 等于 0,则会导致“尝试进行溢出减法”错误。我尝试使用正确的转换方法来解决这个问题:((i as isize)...

35得票9回答
为什么 Integer.MAX_VALUE + 1 == Integer.MIN_VALUE?

System.out.println(Integer.MAX_VALUE + 1 == Integer.MIN_VALUE); 这段代码输出的结果是true。 我理解在Java中int类型是32位的,不能超过231-1,但我不明白为什么将1加到MAX_VALUE上会导致结果为MIN_VAL...

30得票4回答
为什么(18446744073709551615 == -1)成立?

在我处理 string::npos 时,我注意到了一些东西,但在网上找不到任何解释。(string::npos == ULONG_MAX) 和(string::npos == -1) 是真的。 所以我尝试了这个:(18446744073709551615 == -1) 这也是正确的。 怎么...

29得票2回答
无符号整数的atoi等价函数

我正在进行两个关于atoi的操作,但我想知道如何使用无符号整数来避免由于atoi将它们转换为有符号整数而导致的整数溢出。我想要使用32位无符号整数,但是atoi实际上限制了我只能使用31位无符号整数。 if (multiplication_is_safe(atoi(argv[1]),atoi(...

29得票3回答
如何在C语言中检查有符号整数溢出而不产生未定义行为?

有(1):// assume x,y are non-negative if(x > max - y) error; 还有第二个条件:// assume x,y are non-negative int sum = x + y; if(sum < x || sum < y) ...

28得票3回答
一个非空字符串能够具有零的哈希码吗?

在这个问题中,“非空”指的是一个至少包含一个非零字符的字符串。参考实现 hashCode:1493 public int hashCode() { 1494 int h = hash; 1495 if (h == 0) { 1496 in...

28得票5回答
-fwrapv是什么意思?

有人能提供一些示例代码,这些代码在使用-fwrapv和不使用时的行为不同吗? GCC文档表示,-fwrapv指示编译器假定有符号算术运算中加法、减法和乘法的溢出使用二进制补码表示方式进行包装。 但是,无论我如何尝试溢出,结果都与是否使用 -fwrapv相同。

28得票3回答
为什么这个长整型数值溢出后会变成-1,而不是该类型的最小值?

我有以下代码可以返回完全二叉树高度为layer层时节点数:public static long nNodesUpToLayer(int layer) { if (layer < 0) throw new IllegalArgumentException( ...