2012-05-08 8 views
2
unsigned char c0=255,c1=1; 
char c2=c0+c1; //(1) 

ない警告(/ W4)、及びc2は0発現の正確なタイプ何:unsigned char型の2つの値の加算

int i=c0+c1; //(2) 

でない警告(/ W4)、およびIは256です

式(c0 + c1)のタイプは何ですか?署名されていないcharの場合、(2)では0にしてください。 intの場合、(1)で警告が表示されないのはなぜですか。

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

ヘルプ!!!ケース1では

答えて

0

あなたはintとして、私のタイプを指定しているので、ケース2タイプがint型ているときに、unsigned charとC2のタイプを指定しているので、タイプはunsigned char型です。

+0

コンパイラは、割り当ての左側でターゲットタイプ(式のタイプ)を推測しますか? 他に誰かが意見を持っていますか? – Vince

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

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

int i=c0+c1; 

c0 + c1タイプintのままであると変換は割り当て中に発生しません。

+0

(c0 + c1)の型がintで、その値が256の場合、c2は0になります。 char c2 =(char)256; – Vince

関連する問題