8

したがって、私がそれをよく理解していれば、整数昇格は次のことを提供します。char, wchar_t, bool, enum, short型は常にint(またはunsigned int) に変換されます。次に、式に異なる型がある場合、さらに変換が適用されます。

私はこれをよく理解していますか?

はいの場合、私の質問: なぜ良いのですか? なんで?不要にならchar/wchar_t/bool/enum/shortない?たとえば、次のようになります。

char c1;
char c2;
c1 = c2;

前に説明したように、charALWAYS は に変換されるintため、この場合、自動変換後は次のようになります。

int c1;
int c2;
c1 = c2;

charしかし、そのタイプが私のニーズに十分であることがわかっている場合、なぜこれが良いのか理解できません。

4

6 に答える 6

12

ストレージ タイプが自動的に変換されることはありません。これらの変数で整数演算 ( +、 、ビットシフトなど)を開始するとすぐに、自動整数昇格が得られます。-

char c1, c2; // stores them as char
char c3 = c1 + c2; // equivalent to
char c3 = (char)((int)c1 + (int)c2);
于 2013-12-23T16:44:07.513 に答える
2

変数に値を格納する場合、変換は実行されません。値をキャストするか、明示的に算術演算などの演算を実行すると、変換が行われます

于 2013-12-23T16:44:41.117 に答える
2

型変換は、算術演算、シフト演算、単項演算の実行時に発生します。それについて標準が何を言っているかを見てください:

C11; 6.3.1.4 実数浮動小数点と整数:

anintが元の型のすべての値を表すことができる場合 (ビットフィールドの幅によって制限されるため)、値はint に変換されます。それ以外の場合は、に変換されますunsigned int。これらは整数昇格と呼ばれます.58) 他のすべての型は整数昇格によって変更されません。

58.整数昇格は、通常の算術変換の一部として、特定の引数式、単項演算子 、 、および演算子の+オペランド-~およびシフト演算子, 1の両方のオペランドに、それぞれの節で指定されている 場合にのみ適用されます。


1.強調は私のものです。

于 2013-12-23T16:46:47.587 に答える