问题标签 [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++ - 什么是避免整数溢出在 C++ 中将 unsigned int 转换为 int 的有效方法?
以下是在 C++ 中将 unsigned int 转换为 int 的有效且无问题的方法:
或者,还有更好的方法?
更新
正如 James McNellis 所指出的,将 unsigned int > INT_MAX 分配给整数并不是未定义的——而是由实现定义的。因此,这里的上下文现在特别是我的偏好是确保当 unsigned int 超过 INT_MAX 时此整数重置为零。
原始上下文
我有许多 unsigned int 用作计数器,但希望在特定情况下将它们作为整数传递。
在正常操作下,这些计数将保持在 INT_MAX 的范围内。但是,如果发生异常(但有效)情况,为了避免遇到未定义的实现特定行为,我希望在这里进行一些有效的转换。
c - Feedback on analysis of code example (secure coding)
I have a piece of code from an assignment I am uncertain about. I feel confident that I know the answer, but I just want to double-check with the community incase there's something I forgot. The title is basically secure coding and the question is just to explain the results.
My reasoning is this:
At first glance you could imagine the code would run forever, considering it's initialized to a positive value and ever increasing. This of course is wrong because eventually the value will grow so large it will cause an integer overflow. This in turn is not entirely true either, because eventally it will force the variable 'i' to be signed by making the last bit to 1 and therefore regarded as a negative number, therefore terminating the loop. So it is not writing to unallocated memory and therefore cause integer overflow, but rather violating the data type and therefore causing the loop to terminate.
I am quite sure this is the reason, but I just want to double check. Any opinions?
java - 这是 JVM 错误还是“预期行为”?
我注意到一些意外的行为(相对于我个人的期望而言是意外的),我想知道是否存在 JVM 中的错误,或者这可能是我不了解某些细节的边缘情况究竟是什么应该发生。假设我们在 main 方法中有以下代码:
一个天真的期望是这会打印Integer.MAX_VALUE-1
,最大的甚至可以表示int
。但是,我相信整数算术应该在 Java 中“翻转”,所以加 1Integer.MAX_VALUE
应该会导致Integer.MIN_VALUE
. 由于Integer.MIN_VALUE
仍然小于Integer.MAX_VALUE
,因此循环将继续遍历负偶数整数。最终它会回到 0,并且这个过程应该以无限循环的形式重复。
当我实际运行这段代码时,我得到了不确定的结果。打印出来的结果往往是 50 万左右,但确切的值会有所不同。因此,当我认为它应该是一个无限循环时,循环不仅会终止,而且它似乎是随机终止的。这是怎么回事?
我的猜测是,这要么是 JVM 中的错误,要么是正在进行的许多时髦优化导致了这种预期行为。它是哪一个?
java - 为什么 Java 中的复合赋值不能捕获溢出问题?
令我震惊的是,以下代码甚至可以在没有警告的情况下编译:
而正如您所期望的那样,这会产生编译时错误:
我查了一下,确实,JLS(第 15.26.2 节)有这样的说法:
E1 op = E2 形式的复合赋值表达式等价于 E1 = (T) ((E1) op (E2)),其中 T 是 E1 的类型,除了 E1 只计算一次。
这对我来说似乎很荒谬。为什么他们觉得有必要在这里明确投射?似乎自动类型转换无论如何都会处理扩大,并且像这样自动缩小几乎可以保证导致整数溢出。
c++ - 添加两个字符时为什么没有整数溢出?
可能重复:
添加两个字符会产生 int
给定以下 C++ 代码:
输出是逻辑上预期的 150,但是表达式中不应该有整数溢出(a + b)
吗?
显然,这里必须有一个整数提升来处理溢出,或者发生了我看不到的其他事情。我想知道是否有人可以启发我,所以我可以知道在整数提升和溢出方面我可以和不应该依赖什么。
c# - 在 WCF 服务中托管 FireBirdSql 时出现 AccessViolationException
我将 WCF 服务作为托管 Windows 服务托管,当消费者/客户端第二次、第三次或第四次调用其方法时,我不断收到 AccessViolationException。崩溃是完全随机的,所以有时它可能要等到以后再调用几次才会崩溃。
这是带有语法突出显示的代码,以便于阅读: http: //pastebin.com/Z3Z06944
请参阅有关私有方法“CheckUser”的注释,因为这可能是发生异常的地方。
java - 如何捕捉 Spring MVC 中的整数溢出错误?
我正在使用 Spring MVC 3.0.5。Spring 很高兴地忽略了映射到 Integer 的字段的 Integer 溢出。我怎样才能报告正确的错误?
c# - 永远递增,你得到-2147483648?
出于一个我不想解释的聪明而复杂的原因(因为它涉及以极其丑陋和骇人听闻的方式制作计时器),我编写了一些类似这样的 C# 代码:
我希望程序永远挂起或崩溃或其他什么,但令我惊讶的是,在等待大约 20 秒左右后,我得到了这个输出:
好吧,编程教会了我很多东西,但我仍然无法理解为什么不断增加一个数字会导致它最终变成负数……这是怎么回事?
matlab - 有没有办法让 Matlab 整数表现得更像 C++ 整数?
我正在编写一个 Matlab 例程,它可以帮助我模拟一些我最终会用 C++ 编写的代码。一个问题是 Matlab 和 C++ 整数在执行算术运算时的行为不同,导致产生的结果大于容器可以容纳的结果。
例如,在 Matlab 中intmax('uint16')
生成65535
. 并且intmax('uint16')+1
仍然产生65535
。如果你想高于 65535,你不能。Matlab 只是对其进行了限制。
C++ 是不同的。写入unsigned short x = 65535; cout << ++x;
产生0
是因为它完全执行加法并且简单地保留 16 个最低有效位。
有没有办法让 Matlab 的行为方式相同?
java - 如何修复整数溢出产生的错误数字?
我有一个导致整数溢出的错误,导致错误(负)时间戳被写入数据库。代码已经修复了,但我也想修复错误的数据。
我想,我可以只取错误的结果并添加 Integer.MAX_VALUE,但这似乎不起作用,它给我留下了很高的价值。我offset
在下面的代码片段中有值,但没有存储输入值。
以下代码重现了该错误: