integer-overflow相关内容
我正在编程语言,今天我得到了一个点,我可以编译阶乘函数(递归),但是由于一个整数的最大大小,我可以得到的最大的是factorial(12)。什么是一些用于处理任意最大大小的整数的技术。 解决方案 如果你需要大于32位,你可以考虑使用64位整数(长整型),或使用或写入任意精度的数学库,例如 GNU MP 。
..
我做了一个简单的程序,并用GCC 4.4 / 4.5编译如下: int main b $ b { char u = 10; char x ='x'; char i = u + x; return 0; } g ++ -c -Wconversion a.cpp 我有以下: a.cpp:在函数'int main ': a.cpp:
..
我们知道,有符号整数溢出是未定义的行为。但有一些有趣的C ++ 11 cstdint 文档: 有符号整数类型的宽度分别为8,16,32和64位,分别没有填充位和对负值使用2的补码(仅当实现直接支持类型时提供) 请参阅link 这里是我的问题:因为标准明确说明 int8_t , int16_t , int32_t 和 int64_t 负数是2的补码,这些类型未定义的行为? 编
..
有已经对这个问题的解决方案的小的数字 在这里:的C#功能找到两个数字 $ b $三角洲b 在这里:我如何才能找到?2值之间在C# 的差异 我要总结的答案他们都: Math.Abs(A - b) 问题是的当数大这给了错误的答案(由溢流的方式)。更糟糕的是,如果(A - B)= Int32.MinValue 然后 Math.Abs 用一个异常崩溃(因
..
我有列表中所定义的整数和清单; INT> myIntList =新的List< INT>(); 像往常一样,我会增加价值,使用 myIntList.Add()方法列表。我现在面临的问题是,在该列表中的值是动态的(一些计算的结果),可能会超过一个整数可以容纳的最大值。 考虑以下场景: INT X = int.MaxValue; myIntList.Add(X +
..
我有一个循环这使直至循环完成递增一个整数值。因此,如果限制n是一个双变量和增加的变量“i”是一个整数,我就会增超出其极限。 双总= 0; 双号= hugetValue; 的for(int i = 1; I< =数字;我++) { 总=总+ I; } 总回报; 发生什么'我',如果它超过其承载能力?如何改变我的价值?我会得到一个运行时错误? 感谢
..
我们有一些整数运算由于历史原因,有工作同样在PHP,因为它在几个静态类型语言一样。自从我们上次升级PHP的整数溢出的行为发生了变化。基本上,我们使用的是下面的公式: 函数f(X1 $,$ X2,X3 $,$ X4) { 收益率(($ X1 + X2 $)^ $×3)+ $ X4; } 然而,即使转换:函数f(X1 $,$ X2,X3 $,$ X4) { 返回INTVAL(INTV
..
我有这样的code段: 的#include&LT;&stdio.h中GT;INT主(INT ARGC,为const char ** argv的) { INT A =的argv [0] [0]; INT B = argv的[0] [1]; 而((A&GT = 0)及&放大器; (A&LT; B)) { 的printf(“a =%d
..
我有以下的C code: uint8_t有firstValue = 111; uint8_t有secondValue = 145; uint16_t TEMP = firstValue + secondValue; 如果(临时&GT; 0xFF的){ 返回true; } 返回false; 这是另类实现: uint8_t有firstValue = 111; uint8_t有secon
..
是否可以执行一个过程,其的argc = 0?我需要执行一个程序,但其ARGC等于0,这是非常重要的是有没有办法做到这一点? 我试图把2 ^ 32参数在命令行,使其看起来好像ARGC = 0,但有一个最大限制的参数个数。 解决方案 您可以编写调用 EXEC 直接;它允许您指定命令行参数(包括程序名),并缺乏。
..
我怎么能提取不会溢出 INT_MIN 的绝对值?看到这个code的问题: 的#include&LT;&limits.h中GT; #包括LT&;&stdio.h中GT; #包括LT&;&stdlib.h中GT;诠释主要(无效){ 的printf(“INT_MAX数:%d \\ n”,INT_MAX); 的printf(“INT_MIN数:%d \\ n”,INT_MIN);
..
有没有检查任何有效和可移植的方法时,在C或的int64_t操作数uint64_t中溢出的乘法运算? 例如,对于另外uint64_t中的我可以做的: 如果(UINT64_MAX - A&LT; B)overflow_detected(); 别的总和= A + B; 但我不能得到一个类似的简单的前pression乘法。 所有这一切发生,我更是打破了操作数为高,低uint32_t的部件和执行
..
我最近才知道,整数溢出是C中的未定义行为(方的问题 - 是它也UB在C ++中) 经常在C语言编程,你需要找到两个值 A 和 B 的平均值。但是这样做(A + B)/ 2 可导致溢出和不确定的行为。 所以我的问题是 - 什么是找到两个值的平均值的正确方法 A 和 B 中C 3 解决方案 与
..
这是快速排序应该排序“V [左] ... v [右]为增加令”;由K&放从C编程语言复制(没有评论),R(第二版): 无效的qsort(INT v [],诠释左,右诠释) { INT I,最后的; 无效掉期(INT v [],INT I,诠释J); 如果(左&GT; =右) 返回; 交换(ⅴ,左,(左+右)/ 2); 最后剩下=; 对
..
可能重复:结果 检测C / C整数溢出的最佳方式++ 的不,这不是重复。问题是相同的,但问题是不同的。的 gcc编译器可以优化掉溢出检查(与-O2),例如: INT A,B; B = ABS(一); //将溢出如果= 0x80000000的 如果(B&小于0)的printf(“溢出”); //优化掉 gcc的人认为,这是不是一个错误。溢出是未定义的行为,按照C标准,它允许编译器
..
可能重复:结果 检测C / C整数溢出的最佳方式++ 有(1): //假设X,Y都是非负 如果(X&GT;最大 - y)的错误; 和(2): //假设X,Y都是非负 INT总和= X + Y; 如果(总和&LT; X ||总和&LT; Y)错误; 伟驰为preferred或是否有更好的办法。 解决方案 整数溢出(注意,在无符号整数运算永远不会溢出,就被定义为环绕式代替)在
..
我最近读到,在C和C ++符号的整数溢出导致未定义行为: 如果一个前pression的评估过程中,结果不是数学定义或没有针对其类型重新presentable值的范围,行为是不确定的。 我目前想了解这里的不确定的行为的原因。我想是因为整数开始自己周围操纵内存,当它变得太大,以适应基础类型出现在这里未定义的行为。 所以我决定在Visual Studio 2015年写的一个小测试程序来测试
..
在C(short,int和长等)表现出不确定的行为,如果他们得到外部的结果[TYPE_MIN,TYPE_MAX]区间内(在“标准”有符号整数类型的所有操作,其中TYPE_MIN,TYPE_MAX是最小和最大整数值分别可以由特定整数类型被存储 根据C99标准,但是,我们要求所有的 intN_t 类型有补重presentation: 7.8.11.1精确宽的整数类型结果 1. typedef
..
我没有张贴问题之前谷歌搜索。
..
我在该整数用C溢出明确不像签署对口许多地方阅读。 下溢一样吗? 例如: unsigned int类型X = -1; //是否点¯x== UINT_MAX? 感谢。 我不记得在哪里,但我在其他地方见过无符号整型算术是模块化的,所以如果说当时的情况下-1 == UINT_MAX MOD(UINT_MAX + 1)。 解决方案 §6.2.5,第9段: 在无符号的一种计算 操
..