标签: integer-overflow

mips 中的算术溢出

我刚刚开始学习 MIPS 指令的异常处理程序。

我需要使我的程序具有算术溢出异常,以便我可以测试我的异常处理程序。

我有两个数组 A 和 B。数组 A 有十六进制数,数组 B 有整数。

如何通过添加十六进制数和整数来使溢出?

哪些十六进制数和整数相加会导致溢出?

mips integer-overflow

5
推荐指数
1
解决办法
3万
查看次数

重现行为 MAX_VALUE 和 MIN_VALUE

以下内容也适用于其他MIN_VALUE和,但我们现在MAX_VALUE只关注。Integer我知道在Java中整数是32位的,有Integer.MAX_VALUE = 2147483647(2 31 -1)和Integer.MIN_VALUE = -2147483648(-2 31 )。当使用这些值进行计算时,当超出其范围时,数字会环绕/溢出。因此,当您执行类似操作时Integer.MAX_VALUE + 1,结果与 相同Integer.MIN_VALUE。

MIN_VALUE以下是使用和 进行的一些基本算术计算MAX_VALUE:

Integer.MAX_VALUE:                      2147483647
Integer.MAX_VALUE + 1:                  -2147483648
Integer.MAX_VALUE - 1:                  2147483646
Integer.MAX_VALUE * 2:                  -2
Integer.MAX_VALUE * 3:                  2147483645
Integer.MAX_VALUE * 4:                  -4
Integer.MAX_VALUE * 5:                  2147483643
Integer.MAX_VALUE / Integer.MAX_VALUE:  1
Integer.MAX_VALUE * Integer.MAX_VALUE:  1
Integer.MAX_VALUE / Integer.MIN_VALUE:  0
Integer.MAX_VALUE * Integer.MIN_VALUE:  -2147483648
Integer.MAX_VALUE - Integer.MIN_VALUE:  -1
Integer.MAX_VALUE + Integer.MIN_VALUE: …
Run Code Online (Sandbox Code Playgroud)

java integer integer-overflow max min

5
推荐指数
1
解决办法
230
查看次数

可靠的浮点/整数类型转换溢出检测

有没有一种安全的方法来可靠地确定整数类型是否T可以存储浮点整数值f( so f == floor(f))而不会发生任何溢出?

请记住,不能保证浮点类型F与 IEC 559 (IEEE 754) 兼容,并且有符号整数溢出是C++ 中的未定义行为。我对根据当前 C++(编写时为 C++17)标准正确并避免未定义行为的解决方案感兴趣。

以下幼稚的方法不可靠,因为由于浮点舍入,不能保证类型F可以表示std::numeric_limits<I>::max()。

#include <cmath>
#include <limits>
#include <type_traits>

template <typename I, typename F>
bool is_safe_conversion(F x)
{
    static_assert(std::is_floating_point_v<F>);
    static_assert(std::is_integral_v<I>);

    // 'fmax' may have a different value than expected
    static constexpr F fmax = static_cast<F>(std::numeric_limits<I>::max());

    return std::abs(x) <= fmax; // this test may gives incorrect results
}
Run Code Online (Sandbox Code Playgroud)

任何的想法?

c++ floating-point integer integer-overflow type-conversion

5
推荐指数
1
解决办法
308
查看次数

模倒数和无符号整数

模逆可以计算如下(来自Rosetta Code):

#include <stdio.h>

int mul_inv(int a, int b)
{
    int b0 = b, t, q;
    int x0 = 0, x1 = 1;
    if (b == 1) return 1;
    while (a > 1) {
        q = a / b;
        t = b, b = a % b, a = t;
        t = x0, x0 = x1 - q * x0, x1 = t;
    }
    if (x1 < 0) x1 += b0;
    return x1;
}
Run Code Online (Sandbox Code Playgroud)

但是,ints如您所见,输入为 。上面的代码是否也适用于无符号整数(例如 …

math integer-overflow greatest-common-divisor modular-arithmetic

5
推荐指数
1
解决办法
465
查看次数

熊猫:int32 溢出?无法建立数据透视表

我使用pd.pivot_table()方法通过旋转用户项目活动数据来创建用户项目矩阵。但是,数据框太大了,我收到了这样的抱怨:

Unstacked DataFrame太大,导致int32溢出

有关解决此问题的任何建议?谢谢!

r_matrix = df.pivot_table(values='rating', index='userId', columns='movieId')
Run Code Online (Sandbox Code Playgroud)

python integer-overflow pandas

5
推荐指数
1
解决办法
7852
查看次数

释放模式下安全 Rust 中的有符号整数溢出是否被视为未定义行为?

Rust 在调试和发布模式下以不同的方式处理有符号整数溢出。当它发生时,Rust 在调试模式下会发生恐慌,而在发布模式下默默地执行二进制补码包装。

据我所知,C/C++ 将有符号整数溢出视为未定义行为,部分原因是:

  1. 在 C 标准化的那个时候,表示有符号整数的不同底层体系结构,例如补码,可能仍在某处使用。编译器无法假设硬件中如何处理溢出。
  2. 后来的编译器因此做出假设,例如两个正整数之和也必须为正数才能生成优化的机器代码。

因此,如果 Rust 编译器确实在有符号整数方面执行与 C/C++ 编译器相同类型的优化,那么为什么The Rustonomicon指出:

无论如何,Safe Rust 不会导致未定义行为。

或者即使 Rust 编译器不执行这样的优化,Rust 程序员仍然不希望看到有符号整数环绕。不能称为“未定义行为”吗?

integer-overflow rust llvm-codegen

5
推荐指数
1
解决办法
1070
查看次数

如果 Date.now() 大于 Number.MAX_SAFE_INTEGER 会发生什么?

当然,这又花了 20 万年才发生。但是在 的值超过 的值后,Javascript约会系统会出错吗?会发生什么后果?Date.now()Number.MAX_SAFE_INTEGER

也许这个问题看起来很奇怪而且没用。但是任何人都可以回答我的好奇心以及其他可能有相同问题的人。

javascript numbers date integer-overflow unix-timestamp

5
推荐指数
1
解决办法
157
查看次数

Python int 太大,无法转换为 C

我正在运行一段简单的代码来返回和batch之间的整数数量(无需替换)。02**63

from random import sample

batch = 1000
n = 63
rand_nos = sample(range(2**n), batch)
Run Code Online (Sandbox Code Playgroud)

我收到错误

Python int too large to convert to C ssize_t
Run Code Online (Sandbox Code Playgroud)

random.sample我认为这与函数内部将范围长度转换为值有关int。但我找不到任何可以设置的参数,要求函数使用更大范围的数据类型。我该怎么办?谢谢。

python random sample integer-overflow python-3.x

5
推荐指数
1
解决办法
698
查看次数

可以`unsigned int x; scanf("%u",&amp;x);` 真的会导致未定义的行为吗?

有一次我认为我发现了sscanf() 的一个很好的用途,但在阅读了它如何处理整数之后,它似乎不是。有一个应该看起来像这样的字符串:123,456,678我想我可以使用以下代码安全简洁地解析它:

unsigned int x[3];
if( sscanf( s, "%u,%u,%u", x+0, x+1, x+2 ) == 3 )
    …
Run Code Online (Sandbox Code Playgroud)

如果转换失败,我对知道原因并不真正感兴趣,也不担心获得不正确的数据。如果那里有数字以外的东西,scanf()肯定应该创建一个匹配错误并中止,并且它知道我正在寻找一个无符号整数,所以任何负数也应该是一个匹配错误?不。

当我读到转换说明符%u时,我开始怀疑:匹配一个可选的有符号十进制整数。为什么这不是匹配错误?如果签了会怎样?

引自 ISO/IEC 9899:201x 7.21.6.2 ¶ 10,fscanf 函数(重点是我的):

除了 % 说明符的情况外,输入项(或者,在 %n 指令的情况下,输入字符的计数)被转换为适合转换说明符的类型。如果输入项不是匹配序列,则指令执行失败:这种情况是匹配失败。除非赋值抑制由 * 指示,否则转换结果将放置在尚未收到转换结果的格式参数之后的第一个参数所指向的对象中。如果此对象没有合适的类型,或者转换的结果无法在对象中表示,则行为是 undefined。

它看起来好像scanf()将每个看起来像整数的转换说明符都视为相同,将输入读取为某种未指定大小的有符号整数,然后绕过所有正常转换写入输出。

例如,根据正常的隐式转换,将任何整数(负数或正数)转换为较小大小的无符号整数表现良好,但不适用于scanf():

unsigned int x;
x = -1;                   /* Well defined: (-1) + (UINT_MAX+1) = UINT_MAX */
sscanf( "-1", "%u", &x ); …
Run Code Online (Sandbox Code Playgroud)

c scanf integer-overflow language-lawyer

5
推荐指数
1
解决办法
130
查看次数

MSVC 是否有溢出检查数学函数?

在寻找对有符号和无符号整数算术进行溢出检查的函数时,我遇到了这个答案,它提供了很好的编译器内在函数,可以在 GCC 中进行检查数学。由于我当前编写的代码需要跨平台,因此我也需要 MSVC(Microsoft Visual Studio)编译器类似的东西。

是否存在或者我必须手动实现它?

c++ integer-overflow visual-c++

5
推荐指数
1
解决办法
954
查看次数