unsigned char c0=255,c1=1;
char c2=c0+c1; //(1)
警告なし (/W4)、c2 は 0
int i=c0+c1; //(2)
警告なし (/W4)、i は 256
式(c0+c1)の型は? unsigned char の場合、(2) で 0 ではない理由。int の場合、(1) で警告が表示されない理由。
「整数昇格」に関係しているようです。
ヘルプ!!!
unsigned char c0=255,c1=1;
char c2=c0+c1; //(1)
警告なし (/W4)、c2 は 0
int i=c0+c1; //(2)
警告なし (/W4)、i は 256
式(c0+c1)の型は? unsigned char の場合、(2) で 0 ではない理由。int の場合、(1) で警告が表示されない理由。
「整数昇格」に関係しているようです。
ヘルプ!!!
unsigned char c0=255,c1=1;
char c2=c0+c1;
c0 + c1
型int
であり、評価結果は256
です。このint
値はchar
、 に割り当てられたときに に変換されc2
ます。異なる算術型のオペランドをいつでも割り当てることができるため、警告は必要ありません。(技術的には初期化ですが、同じ型と変換の制約が代入と初期化に適用されます)。
int i=c0+c1;
c0 + c1
はまだタイプint
であり、代入中に変換は行われません。
ケース 1 では、c2 の型を unsigned char として指定したため、型はunsigned charです。一方、ケース 2 では、i の型を int として指定したため、型はintです。