草庐IT

integer-overflow

全部标签

c++ - Microsoft Integer Literal Extensions——记录在哪里?

我在Windows安装的标准stdint.h头文件中遇到了一些整数文字。文字具有以下形式的后缀:i8、ui8、i16、ui16、i32、ui32、i64、ui64。我以前遇到过i64形式的后缀,但从未遇到过任何其他形式的后缀。我很好奇这些扩展的记录位置。我花了一些时间查看Microsoft文档和其他文档,但找不到它们。这完全是出于好奇。我很清楚后缀是什么意思。如果有人有指向该文档的链接,如果您分享引用资料,我将不胜感激。提前致谢! 最佳答案 如果这些源自Microsoft的内在文字后缀由于弃用或其他原因而被删除,那么您可以通过C++

c++ - 执行时溢出/下溢是未定义的行为吗?

我正在阅读有关未定义行为的信息,我不确定它是否只是编译时的特性,或者它是否可以在执行时发生。我很理解这个例子(这是从UndefinedBehaviorpageofWikipedia中提取的):AnexamplefortheClanguage:intfoo(unsignedx){intvalue=5;value+=x;if(valueThevalueofxcannotbenegativeand,giventhatsignedintegeroverflowisundefinedbehaviorinC,thecompilercanassumethatatthelineoftheifcheck

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

好的,所以我对C++iostream有一些感觉很奇怪的问题,但它可能是定义的行为,考虑到MSVC++和G++都会发生这种情况。假设我有这个程序:#includeusingnamespacestd;intmain(){inta;cin>>a;cout>a;cout如果我通过给第一个cin一个大于int的最大限制的值来故意溢出,所有对cin.operator>>()的进一步调用将由于某种原因立即返回,并且a被设置为某个值。该值似乎未定义。为什么,这种行为记录在哪里?有没有办法确定是否发生了这种溢出?另外,这个类似的程序似乎可以按我的预期运行。如果我溢出该值,它会为a提供一些值,并继续进行,

c++ - 如果表达式的中间结果溢出,是否是未定义行为?

这个问题是另一个SOquestion的结果.示例代码#includeintmain(){unsignedlongb=35000000;inti=100;intj=30000000;unsignedlongn=(i*j)/b;//#1unsignedlongm=(100*30000000)/b;//#2std::cout输出8585使用g++-std=c++11-Wall-pedantic-O0-Wextra编译此代码会给出以下警告:9:28:警告:表达式[-Woverflow]中的整数溢出问题我认为#1和#2调用未定义行为是否正确,因为中间结果100*30000000没有适合int?还

C++ while 循环优化不能正常工作

我有这段代码:#includeintmain(intargc,constchar**argv){inta=argv[0][0];intb=argv[0][1];while((a>=0)&&(a我正在用gcc-4.5-02-Wstrict-overflow=5编译它。编译器对我大吼大叫警告:假设将X+-C1cmpC2更改为XcmpC1+-C2时不会发生有符号溢出这到底是什么意思?如果我是正确的,这个循环永远不会导致溢出,因为要增加a,它必须小于另一个整数。如果它更大,则循环终止。任何人都可以向我解释这种行为吗? 最佳答案 编译器正在优

c++ - 海湾合作委员会 4.1.2 : error: integer constant is too large for ‘long’ type

我编译了一段关于散列函数的代码并得到了错误:整数常量对于‘long’类型来说太大了。我用谷歌搜索了一下,它说要添加后缀“ULL”,但我确实有ULL作为后缀。这个后缀只有gcc4.4.1支持,我机器上只有gcc4.1.2,不允许安装新的编译器。有什么方法可以更改代码以解决问题吗?谢谢,-托尼unsignedlonglonghash(stringk){//FNVhashunsignedlonglongx=14695981039346656037ULL;for(unsignedinty=0;y 最佳答案 1099511628211对于(3

已解决java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.String异常的

已解决java.lang.ClassCastException:classjava.lang.Integercannotbecasttoclassjava.lang.String异常的正确解决方法,亲测有效!!!文章目录报错问题解决思路解决方法交流报错问题java.lang.ClassCastException:classjava.lang.Integercannotbecasttoclassjava.lang.String解决思路java.lang.ClassCastException:classjava.lang.Integercannotbecasttoclassjava.lang.St

c++ - 当整数变量不能保存它不应该保存的值时,是否在 C++ 中的运行时捕获了 overflow_error

我正在学习C++,我试图编写这个函数来找到可以适合整数类型的最大斐波那契整数:voidfindFibThatFitsInAnInt(){intn1=1;intn2=1;intfib=0;try{while(true){fib=n1+n2;n1=n2;n2=fib;cout但问题是overflow_error根本没有被捕获。我知道这样做的其他方法:我知道我可以这样写:while(fib>=0){fib=n1+n2;n1=n2;n2=fib;cout并且因为fib只是一个“int”而不是一个unsignedint,所以当它被分配一个大于int类型容量的值时,它最终会变成问题是:在C++中是

c++ - 根据 value_type 调用适当的构造函数 : integer or float

我有一个函数,它使用均匀分布将最小值和最大值之间的随机值填充到容器中。#include#include#include#includetemplatevoiduniform_random(TContainer&container,consttypenameTContainer::value_typemin,consttypenameTContainer::value_typemax){std::random_devicerd;std::mt19937gen(rd());//Belowlinedoesnotworkwithintegerscontainerstd::uniform_rea

c++ - 为什么是无限循环?

我试图将255ascii字符写入控制台,但出现无限循环for(chari=0;i 最佳答案 因为i永远不会大于或等于256。它会在它之前溢出。请记住,它的类型是char如果它是unsigned其最大值可以是255,否则127如果它是签名。char是unsigned还是signed,是实现定义的。但通常,根据我的经验,它是有符号的,这意味着通常char可以达到的最大值是127。所以i从0递增到127,然后变为-128,从这里递增到>127,等等,如果它是签名。如果它是unsigned,那么它会从0到255,接下来它会变成0(由于溢出)