问题标签 [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.

0 投票
2 回答
1936 浏览

ruby - BCrypt 说长而相似的密码是等价的——我的问题,gem 还是密码学领域的问题?

我一直在尝试使用 BCrypt,并发现了以下内容。如果重要的话,我正在运行 ruby​​ 1.9.2dev (2010-04-30 trunk 27557) [i686-linux]

起初我认为一旦密码达到一定长度,不同之处就会在所有散列中丢失,只有当它们非常不同(即不同长度)时才会被识别为不同。根据我对哈希函数的了解,这对我来说似乎不太合理,但我没有看到更好的解释。

然后,我尝试缩短每个 long_strings 以查看 BCrypt 从哪里开始能够区分它们,我发现如果我将每个长字符串缩短到 100 个字符左右,最后的尝试('passwor')将开始也返回 true。所以现在我不知道该怎么想。

对此有何解释?

0 投票
3 回答
11477 浏览

c++ - 如何避免整数溢出?

在以下 C++ 代码中,32767 + 1 = -32768。

有什么方法可以将“var”保留为 32767,而不会出现错误?

0 投票
11 回答
26327 浏览

c - 如何处理嵌入式 C 中的包装计数器

我需要处理一个计数器,它可以为我的应用程序提供标记。计数器是 32 位的,所以我需要知道的是如何处理它。例如:

我有一个返回 a 的函数,(timestamp + shifttime)我还有一个返回 1 或 0 的函数,具体取决于时间是否已过,但我的计数器有可能会换行,我该如何处理?


非常感谢大家的回复。我将在此编辑中提供更多详细信息。

我正在使用 STM32 Cortex-M3。我想使用 RTC 计数器将其用作我的应用程序的刻度,以安排需要在特定时间间隔发生的任务。RTC 可以产生溢出中断,因此检测中断不是问题。我遇到的主要问题(或者至少我认为是一个问题)是某些任务获得(timestamp+shift)ie

让我们假设我的 RTC 计数器只有 8 位长,以便于计算。

FlashLedTimeStamp = 14如果当我获得时间戳时我当前的计数器为 250 ,这意味着我StatusLedTimeStamp = 253将如何检查它FlashLedTimeStamp是否已过期?

请记住,我不一定会一直检查以查看当前计数器是什么以及某些时间戳是否已过期。我希望这能说明我遇到的问题是什么。

0 投票
3 回答
12733 浏览

c# - 增加一个整数值超出其整数限制 - C#

我有一个 for 循环,它不断增加一个整数值,直到循环完成。因此,如果限制 n 是一个双精度变量并且增量变量“i”是一个整数,则 i 的增量会超出其限制。

如果“i”超出其容量,会发生什么?i 的值如何变化?我会收到运行时错误吗?

0 投票
2 回答
157 浏览

c99 - 处理 ctype.h 整数溢出

处理字符值的正确方法是什么,当转换为无符号字符时,字符值介于 {INT_MAX + 1 ... UCHAR_MAX} 之间,其中 UCHAR_MAX 大于 INT_MAX。

0 投票
3 回答
2517 浏览

c# - C#中的算术异常

为什么在 C# 中示例 A 是有效的、可编译的并且只会包装而示例 B 不会编译?

一种

或者

或者

我知道默认情况下不会检查算术异常,除非您在配置中使用检查的方法、块或属性明确这样做。我的问题更多地与编译器有关,然后是算术异常是如何发生的。

0 投票
6 回答
1044 浏览

c - 当 long double 不够时使用什么类型?

我正在编写一个程序,将素数分配给矩阵的每个条目,然后我需要将其中的一些相乘。结果数字迅速增长,我不知道要使用哪种类型,因为我得到了 long double 的“环绕”:S

感谢所有帮助。

-皮克尔

0 投票
1 回答
291 浏览

actionscript-3 - Actionscript getBounds : 如果 targetCoOrdinateSpace 没有添加到阶段怎么办

我有两个显示对象 dispObj1、dispObj2。
dispObj2.stage为空。(即无论如何都不会添加到舞台)dispObj1.getBounds(dispObj2)
的输出应该是什么? 它是明确定义的,还是可以任意的? 一旦我得到x 的 boundingRectangle接近6710785,我猜这 是某处整数溢出的症状。


但其他时候我得到了一个合理的 x,y,width,height 值。

0 投票
2 回答
1886 浏览

c++ - 如何在没有未定义行为的情况下进行双块添加?

编辑公共卫生警告 - 这个问题包括关于未定义行为的错误假设。请参阅已接受的答案。

在阅读了最近的博客文章后,我一直在思考在 C 和 C++ 代码中避免所有标准未定义假设的实用性。这是从 C++ 中截取的片段,用于进行无符号 128 位加法...

这显然依赖于关于溢出行为的假设。显然,大多数机器都可以支持正确类型的二进制整数(尽管可能是从 32 位块构建或其他),但优化器显然越来越有可能利用此处的标准未定义行为。也就是说,m_Low < p.m_Low条件可以通过的唯一方法是如果m_Low += p.m_Low溢出,这是未定义的行为,因此优化器可以合法地确定条件总是失败。在这种情况下,这段代码就被破坏了。

问题是,因此...

如何在不依赖未定义行为的情况下编写上述合理有效的版本?

假设您有一个适当的 64 位二进制机器整数,但是您有一个恶意编译器,它总是以最坏的可能(或不可能)的方式解释您的未定义行为。另外,假设您没有一些特殊的内置、内在、库或任何东西可以为您做。

编辑 小说明 - 这不仅仅是检测溢出,还确保 m_Low 和 m_High 都以正确的模 2^64 结果结束,这也是标准未定义的。

0 投票
3 回答
1096 浏览

c++ - 为什么整数溢出会导致 C++ iostream 出错?

好的,所以我对 C++ iostreams 有一些感觉很奇怪的问题,但考虑到 MSVC++ 和 G++ 都会发生这种情况,这可能是已定义的行为。

说我有这个程序:

如果我故意通过给第一个 cin 一个大于 int 的最大限制的值来溢出,所有进一步的调用cin.operator>>()将由于某种原因立即返回,并a设置为某个值。该值似乎未定义。

为什么,这种行为记录在哪里?有没有办法确定是否发生了这种溢出?

此外,这个类似的程序似乎可以按我的意图工作。如果我溢出该值,它会给出a一些值,并继续,就好像溢出从未发生过一样。