通信用語の基礎知識 全国のICカードこれひとつ 戻る

通常PC用 / 人気 更新 今日 カテ
電子計算機 > 仕様・構造 > ソフトウェア > プログラミング言語 > 言語仕様
汎整数拡張
辞書:電算用語の基礎知識 プログラミング仕様編 (PTPROGS)
読み:はんせいすうかくちょう
外語:integral promotion
品詞:名詞

CC++などにある整数の扱われ方で、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」になるのである。

問題

intの長さは処理系依存である。それが16ビットであるか32ビットであるか、あるいはそれ以外の長さであるかは、完全に環境に依存した問題である。

更に、この型変換は自動的に行なわれるため、ソースコードを一見しただけでは問題の箇所が分からず、深刻なバグの原因ともなりうる。

変にケチってcharやshortなどを使うより、素直にintを使っていた方が実は移植性も高まり、意図せぬバグの混入も避けられるのである。

リンク
関連する用語
C
C++

[再検索] [戻る]


通信用語の基礎知識検索システム WDIC Explorer Ver 7.03 (16-May-2019)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club
KisoDic