问题标签 [integer-overflow]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 32 位整数 * 32 位整数 = 64 位整数?
换句话说,这是否按预期工作?
还是我需要先将 i 转换为 64 位?
delphi - 我应该使用无符号整数来计算成员吗?
我应该为我的计数类成员使用无符号整数吗?
回答
例如,假设一个类
这确实有道理,不是吗?存储在列表中的项目数不能为负数,那么为什么不使用无符号整数类型呢?我认为总是尽可能使用最不通用(因此最特殊)的类型通常是一个很好的原则。
现在,遍历列表如下所示:
当列表中存储的项目数为零时,编译器会尝试评估
这导致了一个很好的整数溢出(确切地说是下溢)。结合调试器没有显示发生异常的适当位置的事实,这对我来说很难找到。
让我补充一点,如果您关闭了溢出检查,那么由此产生的错误将更难跟踪,因为您将经常访问不属于您的内存 - 这会导致未定义的行为。
从现在开始,我将为我的所有计数成员使用纯整数,以避免这种情况。
如果这完全是胡说八道,请指出来给我:)
(我只花了一个小时跟踪我的代码中的整数溢出,所以我决定分享一下——当然,这里的大多数人都知道,但也许我可以节省一些时间。)
c - c 中的溢出
我有个疑问
当两个 16 位值加上最大值时,16 位机器会溢出吗?
我会详细说明
谈到 16 位处理器,累加器将是 16 位大小。上面的语句会不会有溢出?请说清楚。
.net - 为什么我的 .net Int64 的行为就像 Int32 一样?
我在 .net 程序中目睹了一种奇怪的行为:
为什么我的 Int64 的行为就好像它们是 Int32 的一样,尽管 Int64.MaxValue 似乎确认它们使用的是 64 位?
如果相关,我使用的是 32 位操作系统,并且目标平台设置为“任何 CPU”
c++ - 用于安全整数转换的 C++ 模板
我正在尝试编写一个 C++ 模板函数,该函数将在不同整数类型、不同宽度以及可能的有符号/无符号不匹配之间的强制转换中引发整数溢出运行时异常。出于这些目的,我不关心从浮点类型转换为整数类型,也不关心其他对象到对象的转换。我想这样做而不必编写大量特殊情况代码。这是我目前拥有的:
这是正确和有效的吗?
编辑:由于各种原因 stl 不可用,所以我不能使用 std::numeric_limits,而来自 Boost 的任何东西都是正确的。
c# - 为什么这不会溢出?
鉴于此代码:
并且知道一个 int 可以容纳 -32,768 到 +32,767。为什么这不会导致溢出?
c - 使用编译器警告捕获常量 1 左移的溢出?
我们在 Linux 内核中编写代码,所以尽我所能,我无法让 PC-Lint/Flexelint 在 Linux 内核代码上工作。内置符号等太多了。但这是一个附带问题。
我们有任意数量的编译器,从 gcc 开始,但也有其他的。随着时间的推移,它们的警告选项越来越强大,它们也是非常强大的静态分析工具。
这是我想要捕捉的。是的,我知道它违反了一些在代码审查中很容易发现的东西,例如“没有幻数”和“当心位移”,但前提是你碰巧看到了那段代码。无论如何,这里是:
进一步更新的问题描述——即使 bar 限制为 16,仍然是一个问题。澄清一下,问题是隐含的 int 类型的常量,它在计划外使复杂的表达式违反了所有计算都以相同的大小和符号进行的规则。
问题:'1' 不是 long long,但作为一个小值常量,默认为 int。因此,即使 bar 的实际值从未超过,例如 16,(1<<bar)
表达式仍然会溢出并破坏整个计算。
可能正确的解决方案:改为写 1ULL。
是否有一个众所周知的编译器和编译器警告标志会指出这个(修订的)问题?
c - 在C中减去两个有符号的32位数字时如何检测溢出?
我有两个有符号整数,我想减去它们。我需要知道它是否溢出。
类似的东西。有没有好的方法来做到这一点?
java - 如何检查Java中的两个数字相乘是否会导致溢出?
我想处理将两个数字相乘导致溢出的特殊情况。代码看起来像这样:
那是简化版。在实际程序中a
,并b
在运行时从其他地方获取。我想要实现的是这样的:
你如何建议我最好编码这个?
更新:a
并且b
在我的场景中总是非负面的。
c - 在两个大整数相乘期间捕获和计算溢出
我正在寻找一种有效(可选标准、优雅且易于实现)的解决方案来乘以相对较大的数字,并将结果存储到一个或多个整数中:
假设我有两个 64 位整数声明如下:
当我这样做时a * b
,如何检测操作是否导致溢出并在这种情况下将进位存储在某处?
请注意,我不想使用任何大型库,因为我对存储数字的方式有限制。