ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
CやC++などにある整数の扱われ方で、int型以下の大きさを持つ整数型オブジェクトは、その値が評価される時点でint型に拡張される、というもの。
Cは、様々な大きさの数値を扱うデータ型が用意されている。
intより小さいものも幾つかあるが、このデータ型は演算時に汎整数拡張の対象となるため、扱いが難しく注意が必要である。
この変換は、unsigned charのような符号なし整数型であっても対象で、演算時には符号のあるint型となる。
なお、C++規格JIS X 3014:2003では「汎整数昇格」、C99規格JIS X 3010:2003では「整数拡張」(integer promotion)という訳語が使われているが、意図するところは同じである。
例えば、unsigned charを例として、次のようなケースを考える。
unsigned char a = 0;
if (a - ((unsigned char)1) < 0) { ... }
aがunsigned charで、1もunsigned charであるから、0-1はUCHAR_MAX、つまり255になるだろう、と考えたら誤りである。
どのような場合でも、演算は汎整数拡張により両オペランドをint型に昇格して計算される。
この式では、残念ながら次のように評価される。
if ((int)a - (int)1 < 0) { ... }
つまり、a - 1は「-1」になるのである。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます