2
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) で警告が表示されない理由。

「整数昇格」に関係しているようです。

ヘルプ!!!

4

2 に答える 2

2
unsigned char c0=255,c1=1;
char c2=c0+c1;

c0 + c1intであり、評価結果は256です。このint値はchar、 に割り当てられたときに に変換されc2ます。異なる算術型のオペランドをいつでも割り当てることができるため、警告は必要ありません。(技術的には初期化ですが、同じ型と変換の制約が代入と初期化に適用されます)。

int i=c0+c1;

c0 + c1はまだタイプintであり、代入中に変換は行われません。

于 2012-05-08T19:18:17.090 に答える
0

ケース 1 では、c2 の型を unsigned char として指定したため、型はunsigned charです。一方、ケース 2 では、i の型を int として指定したため、型はintです。

于 2012-05-08T19:00:00.030 に答える