【質問】shortとintオーバーフローに関する興味深いテスト

2129 ワード

直接コード:
 1:
#include<stdio.h>

int main()
{
unsigned short i=0;
i--;
printf("%u",i);
return 0;
}

2:
#include<stdio.h>

int main()
{
unsigned short i=0;
i--;
printf("%d",i);
return 0;
}

3:
#include<stdio.h>

int main()
{
unsigned int i=0;
i--;
printf("%u",i);
return 0;
}
4:
#include<stdio.h>

int main()
{
unsigned int i=0;
i--;
printf("%d",i);
return 0;
}

以上のコードは32ビットxpシステムvc 6の開発環境で以下のように出力される.
65535
65535
4294967295
-1
出力結果は興味深いですが、最初の2つのiがshort、後の2つのiがintと定義されています.ここで、タイプがunsignedの場合、-1がオーバーフローし、65535/4294967295のような結果が出ますが、iがshortとintの場合、%dで出力された結果はshortが常にオーバーフローしていることを教えてくれますが、intはありません.なぜですか.