是c++中定义的INT_MIN/-1行为
Is INT_MIN/-1 defined behavior in C++?
我有以下INT_MIN/-1
的代码。我希望这已经出来INT_MAX+1(或0与滚动)。但是,我得到的实际结果是INT_MIN。这是我的测试代码:
#define __STDC_LIMIT_MACROS
#include <stdint.h>
#include <stdio.h>
#include <limits.h>
using namespace std;
int main()
{
int min=INT_MIN;
int res=min/-1;
printf("result: %in", res);
printf("max: %i min: %in", INT_MAX, INT_MIN);
return 0;
}
这个实现是特定的和/或未定义的行为吗?
这个实现是特定的和/或未定义的行为吗?
是,有符号整数溢出是未定义的行为。c++ 11标准第5/4段:
如果在表达式求值期间,结果没有数学定义或不在的范围内对于可表示值的类型,其行为是未定义的。[…]
注意,同样的方法不适用于unsigned算术。如第3.9.1/4段和脚注46所述:
无符号整数,声明为无符号,应遵守算术模
2^n
的定律,其中n
为数字该特定大小的整数的值表示中的位。[…)这意味着unsigned算术运算不会因为无法用结果表示的结果而溢出类所能表示的最大值大1的数的模化后的无符号整数类型生成的无符号整数类型。
这是有符号整数溢出,因此是未定义的行为,这个关于如何确保对有符号整数的操作不会导致溢出的Cert
文档非常好,据我所知涵盖了所有实例。这是Division
部分的if
语句,涵盖了您的问题:
if ( (sl2 == 0) || ( (sl1 == LONG_MIN) && (sl2 == -1) ) ) {
/* Handle error condition */
}
else {
result = sl1 / sl2;
}
相关文章:
- 从命令行c++发送文本文件名
- 使用新行和不使用新行读取文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 预处理器:插入结构名称中的前一个行号
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 使用一个考虑到std::map中键值的滚动或换行的键
- MSVC多行宏编译器错误
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- C++MySQL C api用户输入行
- 如何将 txt 文件中的行分隔为组件C++
- 无法通过空白将文本文件行分隔为矢量
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 如何找到锁定Linux futex的C++行
- 在fstream期间忽略空行
- 具有N列和N行的矩阵,列必须具有N-1、N-2等值
- 遇到新行时,有没有办法停止istream_iterator
- 如何在文件和行号中抛出错误
- 如何在c++中从文本文件中逐行读取整数
- 第 5 行:字符 54:错误:调用"min(int,std::__cxx11::basic_string<char>::size_type)"没有匹配函数
- C++在数组中查找max(按行)和min(按列)元素