integer-overflow相关内容
在下面的程序中,如果算术表达式出现问题,我们如何让编译器发出警告/错误。 如果算术表达式产生的值超过其类型的最大值,我希望编译器发出警告/错误。 我用gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4)编译了下面的程序,使用的编译命令是gcc int_promo_flags.c -Wall -Wextra 我期待来自第long long int y
..
我在玩QFtp(是的..我知道),一切运行正常。 使用他们自己的示例中的代码作为指导。 http://doc.qt.io/archives/qt-4.7/network-qftp-ftpwindow-cpp.html 我遇到的唯一问题是发送(或接收)大文件(比方说3 GB)时进度条出现故障。 这是由于中从qint64到int的强制转换: void FtpWindow:
..
乍一看,这个问题可能与 How检测整数溢出?,但实际上有很大不同. 我发现虽然检测无符号整数溢出非常简单,但在 C/C++ 中检测 有符号 溢出实际上比大多数人想象的要困难. 最明显但最幼稚的方法是: int add(int lhs, int rhs){整数总和 = lhs + rhs;if ((lhs >= 0 && sum
..
无符号整数溢出在 C 和 C++ 标准中都有很好的定义.例如,C99 标准(§6.2.5/9) 状态 涉及无符号操作数的计算永远不会溢出,因为不能用生成的无符号整数类型表示的结果是以比最大值大一的数字为模减少,可以是由结果类型表示. 但是,两个标准都规定有符号整数溢出是未定义的行为.同样,来自 C99 标准 (§3.4.3/1) 未定义行为的一个例子是整数溢出行为 这种差异
..
..
我一直在尝试使用 BCrypt,并发现以下内容.如果重要的话,我正在运行 ruby 1.9.2dev (2010-04-30 trunk 27557) [i686-linux] require 'bcrypt' # bcrypt-ruby gem,版本 2.1.2@long_string_1 = 'f287ed6548e91475d06688b481ae8612fa060b2d402fdde
..
我知道这样的话题被问了好几次,但我的问题是关于完整的 32 位 int 的溢出.例如: 11111111111111111111111111111111 +00000000000000000000000000000001 =00000000000000000000000000000000//溢出! 我发现 topic 有类似的问题,但是算法并不完美. 111111111111111111
..
System.out.println(Integer.MAX_VALUE + 1 == Integer.MIN_VALUE); 是真的. 我知道 Java 中的整数是 32 位的,不能超过 231-1,但我不明白为什么在其 MAX_VALUE 结果中加 1在 MIN_VALUE 而不是某种异常.更不用说像 Ruby 那样将透明转换为更大的类型. 此行为是否在某处指定?我可以依赖它
..
我做了一个简单的程序,用 GCC 4.4/4.5 编译如下: int main(){字符u = 10;字符 x = 'x';字符 i = u + x;返回0;} g++ -c -Wconversion a.cpp 我有以下内容: a.cpp:在函数“int main()"中:a.cpp:5:16:警告:从“int"转换为“char"可能会改变其值 对于以下代码,我收到了同样的警告:
..
我想定义一个函数,它接受一个 unsigned int 作为参数并返回一个 int 同余模 UINT_MAX+1 到参数. 第一次尝试可能如下所示: int unsigned_to_signed(unsigned n){返回 static_cast(n);} 但正如任何语言律师所知,对于大于 INT_MAX 的值,从无符号转换为有符号是实现定义的. 我想实现这一点,以便
..
在几种现代编程语言(包括 C++、Java 和 C#)中,该语言允许整数溢出 在运行时发生而不会引发任何类型的错误条件. 例如,考虑这个(人为的)C# 方法,它没有考虑上溢/下溢的可能性.(为简洁起见,该方法也不处理指定列表为空引用的情况.) //返回指定列表中值的总和.private static int sumList(List list){整数总和 = 0;foreach(
..
我正在寻找一种有效(可选标准、优雅且易于实现)的解决方案来乘以相对较大的数字,并将结果存储到一个或多个整数中: 假设我有两个这样声明的 64 位整数: uint64_t a = xxx, b = yyy; 当我执行 a * b 时,如何检测操作是否导致溢出并在这种情况下将进位存储在某处? 请注意,我不想使用任何大型库,因为我对存储数字的方式有限制. 解决方案 1.检测溢出:
..
Java 如何处理整数下溢和上溢? 在此基础上,您将如何检查/测试这种情况是否正在发生? 解决方案 如果溢出,返回到最小值 并从那里继续.如果下溢,则返回 最大值 并从那里继续. 您可以按如下方式预先检查: public static boolean willAdditionOverflow(int left, int right) {if (right
..
我正在使用散列函数 murmur2 返回一个 uint64. 然后我想把它存储在 PostgreSQL 中,它只支持 BIGINT(有符号 64 位). 因为我对数字本身不感兴趣,而只对二进制值感兴趣(因为我将它用作检测唯一性的 id(我的值集约为 1000 个值,64 位哈希对我来说就足够了)我想通过“只是"更改类型将其转换为 int64. 如何以一种令编译器满意的方式做到这一
..
假设我有一个 char 指针: 字符 * cp;诠释 val2 = 2;cp = &val2;*cp = 1234; 由于值 1234 太大而无法放入 1 个字节,会发生什么情况?它会溢出并导致存储不正确的值,还是会以某种方式跨多个字节存储正确的值? 解决方案 在*cp = 1234;中,*cp只指一个字节,第一个(最低-addressed) val2 的字节. 在赋值中,右边
..
我想在 clojure 中计算 !1000,我怎么做才不会出现整数溢出异常? 我现在的阶乘代码是:(reduce * (range 1 1001)). 解决方案 您可以使用 *' 运算符,该运算符通过自动将结果提升到 BigInt 来支持任意精度,以防它溢出: (reduce *' (range 1 1001))
..
我正在尝试编写一个 C++ 模板函数,它将在整数溢出时引发运行时异常,该函数在不同整数类型、不同宽度和可能的有符号/无符号不匹配之间进行转换.出于这些目的,我不关心从浮点类型到整数类型的转换,也不关心其他对象到对象的转换.我想这样做而不必编写大量特殊情况代码.这是我目前拥有的: 模板void safe_cast( const T& source, R& result ){//获取类型 R 的最大
..
我想定义一个函数,它接受一个 unsigned int 作为参数,并返回一个 int 全等模 UINT_MAX+1 给参数. 第一次尝试可能如下所示: int unsigned_to_signed(unsigned n){返回 static_cast(n);} 但任何语言律师都知道,对于大于 INT_MAX 的值,从无符号转换为有符号是实现定义的. 我想实现这一点,以便 (a) 它
..
这个可能很容易.我们知道运算符 &+ 对整数进行模运算(环绕),而运算符 + 会导致错误. $ swift1>var x: Int8 = 100x: Int8 = 1002>x &+ x$R0:Int8 = -563>x + x执行中断.输入 Swift 代码以恢复并继续. 这是什么错误?我无法抓住它,也无法将其转换为可选: 4>做 {try x + x} catch {print("ge
..
我在很多地方都读到过,与有符号的对应物不同,无符号整数溢出在 C 中是明确定义的. 下溢一样吗? 例如: unsigned int x = -1;//x == UINT_MAX 吗? 谢谢. 我不记得在哪里,但我在某处读到无符号整数类型的算术是模块化的,所以如果是这种情况,那么 -1 == UINT_MAX mod (UINT_MAX+1). 解决方案 §6.2.5,
..