我對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
如果有符號整數的表示是「補碼」或「有符號」的數量級,則會定義它的行爲,因爲不會發生溢出。 –