ツールセットv141でVisual Studio Enterprise 2017バージョン15.1(26403.7)を使用しています。(Visual C++ v141)ビット単位のコンパイルが正しくない
次のコードは正しくコンパイルされていないようです。 Visual Studioで
#define GMASK(rangeStart, rangeEnd) ((1 << (rangeEnd - rangeStart + 1)) - 1)
uint32_t _gmask(uint32_t rangeStart, uint32_t rangeEnd)
{
return ((1 << (rangeEnd - rangeStart + 1)) - 1);
}
int main()
{
cout << bitset<32>(GMASK(0, 31)) << endl;
cout << bitset<32>(_gmask(0, 31)) << endl;
return 0;
}
出力は
11111111111111111111111111111111
00000000000000000000000000000000
しかし、GCCで出力が
11111111111111111111111111111111
11111111111111111111111111111111
なぜそれは同じコードだ出力に違いがありますか?
あなたは整数変換ルールを使い、結果として未定義の動作を得ています。 – paddy