我对INT_MIN/-1
有以下代码。我期望这已经出来是INT_MAX + 1(或翻转0)。但是,我得到的实际结果是INT_MIN。这是我的测试代码:INT_MIN/-1是否在C++中定义了行为?
#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: %i\n", res);
printf("max: %i min: %i\n", INT_MAX, INT_MIN);
return 0;
}
此实现是否特定和/或未定义的行为?
签名溢出是不确定的,只有无符号的溢出定义为“模数'1个<< width'”。 – 2013-06-18 18:30:08
“INT_MAX + 1”在滚动时不为0,它是“INT_MIN”。 – chris
如果有符号整数的表示是“补码”或“有符号”的数量级,则会定义它的行为,因为不会发生溢出。 –