integer-overflow相关内容

如果 32 位整数溢出,我们可以使用 40 位结构而不是 64 位长的结构吗?

如果,比如说,一个 32 位整数溢出,而不是将 int 升级为 long,如果我们需要一个 40 位类型,我们可以使用一些 40 位类型吗?范围只在 240 之内,所以我们为每个整数节省 24 (64-40) 位? 如果是,怎么做? 我必须处理数十亿,空间是一个更大的限制. 解决方案 是的,但是... 这当然可能,但通常是荒谬的(对于任何不使用数十亿个这些数字的程序): ..
发布时间:2021-12-24 17:08:20 C/C++开发

如何在 MATLAB/Octave 中获得真正的整数溢出?

我正在为 MATLAB/Octave 中的某些 VHDL 代码开发验证工具.因此,我需要生成“真实"溢出的数据类型: intmax('int32') + 1ans = -2147483648 以后,如果我可以定义变量的位宽会很有帮助,但现在这并不重要. 当我构建一个类似 C 的示例时,其中一个变量会增加直到它小于零,它会永远旋转: test = int32(2^30);而(测试> 0) ..
发布时间:2021-12-08 14:41:06 其他开发

为什么使用整数而不是长整数?

我经常看到与 Overflow 错误相关的问题,vba. 我的问题是为什么使用 integer 变量声明而不是仅仅将所有数值变量(不包括 double 等)定义为 long? 除非您正在执行类似 for 循环的操作,您可以保证该值不会超过 32,767 的限制,否则是否会影响性能或其他要求不使用 long? 解决方案 整数变量存储为 16 位(2 字节)数字 Offi ..
发布时间:2021-12-03 16:04:50 其他开发

检测 C/C++ 中的有符号溢出

乍一看,这个问题似乎是 How检测整数溢出?,但实际上有很大不同. 我发现虽然检测无符号整数溢出非常简单,但检测 C/C++ 中的有符号溢出实际上比大多数人想象的要困难. 最明显但最幼稚的方法是: int add(int lhs, int rhs){int sum = lhs + rhs;if ((lhs >= 0 && sum ..
发布时间:2021-12-02 08:29:11 C/C++开发

有符号整数溢出在 C++ 中仍然是未定义的行为吗?

众所周知,有符号整数溢出是未定义的行为.但是在 C++11 cstdint 文档中有一些有趣的东西: 宽度分别为 8、16、32 和 64 位的有符号整数类型,没有填充位,对负值使用 2 的补码(仅当实现直接支持该类型时才提供)> 见链接 这是我的问题:因为标准明确规定对于 int8_t、int16_t、int32_t 和 int64_t> 负数是 2 的补码,这些类型的溢出仍然是未 ..
发布时间:2021-12-01 15:37:21 C/C++开发

为什么无符号整数溢出定义了行为,但有符号整数溢出不是?

C 和 C++ 标准都很好地定义了无符号整数溢出.例如,C99 标准(§6.2.5/9) 状态 涉及无符号操作数的计算永远不会溢出,因为无法由结果无符号整数类型表示的结果是以比可以得到的最大值大 1 的数为模减少由结果类型表示. 然而,两个标准都声明有符号整数溢出是未定义的行为.同样,来自 C99 标准 (§3.4.3/1) 未定义行为的一个例子是整数溢出行为 这种差异是否 ..
发布时间:2021-12-01 15:14:09 C/C++开发

当整数列上的 auto_increment 达到数据库中的 max_value 时会发生什么?

我正在实施一个数据库应用程序,我将同时使用 JavaDB 和 MySQL 作为数据库.我的表中有一个 ID 列,其类型为整数,我使用数据库 auto_increment-function 作为值. 但是当我收到超过 2(或 4)0 亿个帖子并且整数不够时会发生什么?整数是溢出并继续还是抛出了我可以处理的异常? 是的,我可以更改为 long 作为数据类型,但是我如何检查何时需要?而且我认 ..

如何检查在 Java 中将两个数字相乘是否会导致溢出?

我想处理两个数字相乘导致溢出的特殊情况.代码如下所示: int a = 20;长 b = 30;//如果a或b足够大,这个结果会悄悄溢出长 c = a * b; 这是一个简化版本.在实际程序中,a 和 b 在运行时来自别处.我想要实现的是这样的: long c;if (a * b 会溢出) {c = Long.MAX_VALUE;} 别的 {c = a * b;} 你如何建议我最好地编码? ..
发布时间:2021-11-25 20:29:47 Java开发

数组的大小是否受 int 的上限限制(2147483647)?

我正在做一些 Project Euler 练习,我遇到了一个场景,我有 需要大于 2,147,483,647(C# 中 int 的上限)的数组. 当然这些是大数组,但例如,我不能这样做 //失败bool[] BigArray = new BigArray[2147483648];//也失败,无法将 uint 转换为 intArrayList BigArrayList = new Array ..
发布时间:2021-11-18 03:46:24 C#/.NET

为什么/如何 gcc 在这个有符号溢出测试中编译未定义的行为,以便它适用于 x86 而不是 ARM64?

我正在自学 CSAPP,在运行断言测试时遇到一个奇怪的问题,得到了一个奇怪的结果. 我不知道从什么开始这个问题,所以让我先获取代码(文件名在评论中可见): //文件:2.30.c//作者:iBugint tadd_ok(int x, int y) {如果 ((x ^ y) > > 31)返回 1;//一个正数和一个负整数相加总是没有问题的如果 (x 0)返回 (x + y) >y;//x ..
发布时间:2021-11-17 22:46:34 其他开发

执行 argc=0 的进程

是否可以执行 argc = 0 的进程?我需要执行一个程序,但它的 argc 等于 0 非常重要.有没有办法做到这一点?我试图在命令行中放入 2^32 个参数,使其看起来好像 argc = 0 但参数数量有最大限制. 解决方案 您可以编写一个调用 直接执行;允许您指定命令行参数(包括程序名称)和缺少参数. ..
发布时间:2021-11-17 21:13:21 其他开发

ASM8086:mul、imul、进位标志和溢出标志

我理解进位标志和溢出标志的逻辑.但是,当我读到这个程序(用 MASM 8086 编写)时,我有点困惑. 程序的目的是判断一个二次方程是否有两个不同的解、两个相等的解或根本没有解. .model 小.堆.数据aa dw 2bb dw 4cc dw 2sol_msg db "存在两个实解", CR, NLno_sol_msg db "没有真正的解决方案!", CR, NLsol_coinc d ..
发布时间:2021-09-29 19:39:40 其他开发

无符号长长溢出错误?

我在使用 unsigned long long 时遇到了一些奇怪的问题. 当我设置一个 unsigned long long 时会发生这种情况(我使用了 size_t,但是这个问题可以用 u-l-l 重复).我已将其设置为 2^31,但由于某种原因,它恢复为 18446744071562067968,或 2^64 - 2^31.请记住,我使用的是 x64 编译: unsigned long ..