integer-overflow相关内容

如何在 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 作为数据类型,但是我如何检查何时需要?而且我认 ..
发布时间:2021-11-30 20:41:42 其他开发

如何检查在 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 Web开发

Java 如何处理整数下溢和溢出,您将如何检查它?

Java 如何处理整数下溢和上溢? 以此为基础,您将如何检查/测试这是否正在发生? 解决方案 如果溢出,返回最小值 并从那里继续.如果下溢,则返回到 最大值 并从那里继续. 您可以按如下方式事先检查: public static boolean willAdditionOverflow(int left, int right) {if (right ..
发布时间:2021-11-25 10:40:13 Java Web开发

Java 如何处理整数下溢和溢出,您将如何检查它?

Java 如何处理整数下溢和上溢? 以此为基础,您将如何检查/测试这是否正在发生? 解决方案 如果溢出,返回最小值 并从那里继续.如果下溢,则返回到 最大值 并从那里继续. 您可以按如下方式事先检查: public static boolean willAdditionOverflow(int left, int right) {if (right ..
发布时间:2021-11-19 22:33:21 Java Web开发

数组的大小是否受 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 其他开发

为什么/如何 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 其他开发

得到 unsigned long long 加法进位

我想得到在 c 中添加两个无符号 64 位整数的进位位.如果需要,我可以使用 x86-64 asm.代码: #include typedef unsigned long long llu;int main(void){llu a = -1, b = -1;int进位=/*a+b进位*/;llu res = a+b;printf("a+b = %llu (因为加法溢出), 进位位 = %d\n", ..
发布时间:2021-09-29 19:44:22 其他开发

C 和 asm 中的 imulq 和 unsigned long long 溢出检测

作为组装新手,我使用 gcc 进行逆向工程.但是现在我遇到了一个有趣的问题:我尝试将 x86-64 的两个 64 位整数相乘.C - 代码如下所示: unsigned long longval(unsigned long long a, unsigned long long b){返回 a*b;} 并用gcc编译: val:movq %rdi, %raximulq %rsi, %rax回复 ..
发布时间:2021-09-29 19:44:04 其他开发

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 ..
发布时间:2021-09-18 19:13:13 其他开发

是否为 VHDL numeric_std 有符号/无符号定义了溢出

如果我有一个 unsigned(MAX downto 0) 包含值 2**MAX - 1,那么 VHDL (87|93|200X) 标准是否定义了什么当我将它加一时会发生什么?(或者,类似地,当我从零减一时?) 解决方案 简短回答: 没有溢出处理,溢出进位只是丢失了.因此,结果只是您的运算模 2^MAX 的整数结果. 更长的答案: numeric_std 包是一个标准包, ..
发布时间:2021-09-17 19:49:46 其他开发

C - 检测加法的无符号整数溢出

这是我在尝试将两个数字相加时检测是否发生无符号整数溢出的实现. 我的系统上 unsigned int (UINT_MAX) 的最大值是 4294967295. int check_addition_overflow(unsigned int a, unsigned int b) {如果 (a > 0 && b > (UINT_MAX - a)) {printf("发生溢出\n");}返回0 ..
发布时间:2021-09-14 20:12:07 其他开发

是否从任何被视为未定义行为的整数中减去 INT_MIN?

如果我有这样的东西怎么办: int a = 20;int min = INT_MIN;如果(-a - 分钟)//做点什么 假设 INT_MIN 如果正大于 INT_MAX.min 是否会被编译器转换为类似于 -INT_MIN 中的 -min 之类的内容,这可能是未定义的? 解决方案 您是对的,应用于 INT_MIN 的一元减号可以是未定义的,但这在您的示例中不会发生. -a - ..
发布时间:2021-09-13 20:40:58 其他开发