草庐IT

integer-overflow

全部标签

c++ - 数组在 C++ 中自动填充自身

我正在学习C++,做了一些简单的示例,发现了这种奇怪的行为。填充整数数组的元素时,如果任何元素设置为大于2147483647(我认为这是最大整数值?),则数组中的其余元素将设置为该确切数字,每个其中之一。我知道如果一个元素超出了它的类型限制,编译器会将它限制在该限制内,但我不明白为什么它对其他项目做同样的事情,甚至不要求用户填写它们。这是我运行的一个简单测试:#includeusingnamespacestd;intmain(){inttest[5];intnum=0;for(inti=0;i>num;test[i]=num;}cout感谢阅读、评论和帮助!

c++ - scanf 与 cin : string as integer processing

我有一个输入字符串“0100”为什么scanf("%i",&n);返回64而cin>>n;给我100?为什么cin以十进制值思考,而scanf以八进制值思考? 最佳答案 Fortheispecifier:  Anynumberofdigits,optionallyprecededbyasign(+or-).Decimaldigitsassumedbydefault(0-9),buta0prefixintroducesoctaldigits(0-7),and0xintroduceshexadecimaldigits(0-f).-sca

c++ - 对 C++ 异常处理很困惑

试图将异常处理添加到我的C++程序中,但我发现它非常困惑。该程序将值i和j设置为它们的最高可能值并递增它们。我想我希望异常处理能够在整数溢出/回绕发生时检测到它(?)到目前为止,这是我得到的:#include#include#include#includeusingnamespacestd;intmain(){inti;unsignedintj;try{i=INT_MAX;i++;cout程序运行,但异常处理部分不起作用。可能是什么问题? 最佳答案 i递增超过INT_MAX的行为是未定义。那是因为它是一个带符号的整数类型。在这种情况

c++ - LNK2013错误 "fixup overflow"

我有一个用C++编写的Windows8Metro应用程序,我正在尝试将其编译为ARM。在链接过程中,我遇到了以下错误的许多实例:"errorLNK2013:BLX23(T)fixupoverflow.Target''isoutofrange"MSDNsite说:“您可以通过创建多个图像或使用/ORDER选项来解决此问题,这样指令和目标就更靠近了。”但我真的不明白如何让它发挥作用。有问题的符号是编译器生成的,不涉及安腾架构,因此该页面上的其他建议不适用。此外,有错误的文件是*.g.cpp文件,由编译器从项目中包含的xaml页面生成。metro应用程序在Win32配置上运行得很好,所以我想

c++ - 不同的编译器用来处理数字转换溢出的一些常见策略是什么?

我明白,在C++中,当我将float/double转换为int时,float超出int可以容纳的范围,结果未定义为C++语言的一部分。结果取决于实现/编译器。常见的编译器使用哪些策略来处理这个问题?将7.2E12转换为int可以产生值1634811904或2147483647。例如,有人知道编译器在每种情况下都在做什么吗? 最佳答案 编译器生成指令序列,为所有不会导致溢出的输入生成正确的结果。这就是它所需要担心的(因为overflowintheconversionfromfloating-pointtointegerisundefi

c++ - 警告 : Comparison between signed and unsigned integer expression

我在codepad.org上运行以下代码时出现此错误。“在成员函数‘doubleXchange::getprice(std::string)’中:第87行:警告:有符号和无符号整数表达式之间的比较”这是我的代码:#include#include#includeusingnamespacestd;classXchange{public:Xchange();//doesnothing(?)doublegetprice(stringsymbol);private:vectorstocks;};doubleXchange::getprice(stringsymbol){for(inti=0;i

c++ - C/C++ : Converting hexadecimal value in char to integer

我将十六进制值存储为字符:charA='0';charB='6';charC='E';...我需要将它们转换为整数。我知道'atoi',但这只适用于十进制编码的字符值。有类似的功能吗? 最佳答案 intv=(A>'9')?(A&~0x20)-'A'+10:(A-'0');对于ASCII是正确的。对于其他字符集,类似的方法也行得通,但您需要使用toupper而不是&~0x20。 关于c++-C/C++:Convertinghexadecimalvalueinchartointeger,我们

c++ - 如何过滤 std::integer_sequence

如果我理论上有一个整数序列,比如std::integer_sequence我如何使用一些编译时谓词过滤它以获得可能更小的std::integer_sequence?为了论证,假设我只想要偶数值,这导致了“我怎样才能使以下static_assert(或接近的东西)通过?”的问题static_assert(std::is_same_v,decltype(FilterEvens(std::integer_sequence{}))>,"Integersequencesshouldbeequal");这个问题的灵感来自于思考我们如何完成删除两个位集(thisquestion)之间的重复项,假设我

c++ - C/C++ : how to get integer unix timestamp of build time (not string)

我正在尝试实现非常微不足道的事情:我需要存储构建时间的整数32位unix时间戳,但是我找到的所有宏(__DATE__,__TIME__,__TIMESTAMP__)扩展为字符串,而不是整数。看来,我们只是没有它(这对我来说很奇怪)。我真的想要整数,而不是字符串。获得它的最佳做法是什么?更新:附带说明:我做嵌入式的东西,所以我没有足够的资源(比如128KB的闪存),因此解析字符串真的是个坏主意。我为什么需要它:我只需要每个Beta版本都有唯一的版本号。首先,hex文件将被命名为my-firmware-v2-33-BETA-1397315745.hex,其次,当我需要在设备屏幕上显示当前版

c++ - SPARC : How to handle integer doubleword pairs? 的 GCC 内联汇编

据我了解,在SPARC中,32位整数存储在单个寄存器中,64位整数存储在相邻的寄存器对中,偶数寄存器包含高32位,奇数寄存器包含低位32位。我需要编写一些专门的SPARC内联汇编宏(内联汇编函数也可以)来处理64位整数双字对,但我不知道如何进行通用引用(使用GCC扩展内联汇编)到我的内联汇编中这对的两半。虽然我的汇编宏比下面显示的MULTIPLY()宏稍微复杂一点,但乘法示例(如果有效)将演示如何处理64位双字对的两半。谁能告诉我如何修复我的MULTIPLY()宏?以防万一,我在...bash-2.03$uname-aSunOS[...]5.8Generic_117350-39sun4