条件と変換結果とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > 条件と変換結果の意味・解説 

条件と変換結果

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/10/02 16:40 UTC 版)

汎整数拡張」の記事における「条件と変換結果」の解説

端的に言うと、int型あるいはunsigned int型使用できる式の中では、char, short, int, intビットフィールド符号付き符号無しかかわらず、それら元の型の全ての値をint型表現できるならばそれらの値をint型に、それ以外はunsigned int型変換するということである。演算先立ってすべてのオペランドの型が揃えられる。 例えば、unsigned char同士演算では、unsigned char型のまま演算するのではなく、unsigned char型の値をまずint型格上げする変換暗黙的に行なわれるその後途中の各演算int型行なわれる。これにより、各演算結果がINT_MAXを超えたりINT_MIN未満となったりしないかぎり、計算途中の値がオーバーフローして算術エラーが起こることはない。 同様にint型での演算結果をunsigned char型に代入する際に格下げする変換暗黙的に行なわれるが、最終結果がUCHAR_MAXを超えたり0未満となったりしないかぎり、オーバーフローが起こることはない。 #include #include int main(void) { unsigned char uc1 = 100; unsigned char uc2 = 100; unsigned char uc3 = 0; unsigned char uc4 = 200; int si = uc1 * uc2; /* 10000 */ unsigned char uc5 = -(uc1 * uc2) / (uc3 - uc4); /* 50 */ printf("INT_MIN = %+d\n", INT_MIN); printf("INT_MAX = %+d\n", INT_MAX); printf("UCHAR_MAX = %d\n", UCHAR_MAX); printf("si = %d\n", si); printf("uc5 = %d\n", uc5); return 0;} 上記において、unsigned char型の値はすべてint型表現可能であることから、先程示した汎整数拡張規則適用され、式uc1 * uc2におけるuc1uc2評価結果は、いったんint型格上げされる。つまり、uc1 * uc2暗黙的に(int)uc1 * (int)uc2みなされる同様に、-(uc1 * uc2) / (uc3 - uc4)は暗黙的に-((int)uc1 * (int)uc2) / ((int)uc3 - (int)uc4)とみなされる別の例を示す。 #include #include int main(void) { unsigned char uc = UCHAR_MAX; /* UCHAR_MAX は unsigned char 型で表現できる最大値 */ int si1 = uc + 1; /* (1) */ int si2 = ++uc; /* (2) */ printf("si1 = %d\n", si1); printf("si2 = %d\n", si2); return 0;} 上記(1)の代入式では、まず右辺uc + 1において、unsigned char型のオブジェクトであるucに、int型リテラルである1を加算する演算行なう。このとき、先程同じよう汎整数拡張適用されuc評価結果は、いったんint型格上げされる。この処理系ではchar型が8ビットであると仮定すれば、UCHAR_MAXの値は255になる。そしてこのとき、uc評価結果である255はunsigned charではなくint型である。ゆえに、uc + 1演算結果int型255 + 1すなわち256となり、si1に代入される値は256である。 一方上記(2)の代入式では、まず右辺++ucにおいて、unsigned char型のオブジェクトであるucに前置インクリメント演算子付いているから、以下のようにucに1を加算した値をuc代入するという計算が行なわれるuc = uc + 1; /* ++uc解釈 */ 上記における単純代入演算子=の右オペランドには先程同じよう汎整数拡張適用されて、uc評価結果255int型変換され、そしてuc + 1演算結果int型256となる。その後int型256をunsigned char型のuc代入する演算が行なわれる。しかしこのとき、unsigned char型では256表現することはできないので、int型256を、unsigned char型に格下げする変換が行なわれることになる。 今回変換では、前述の「格下げ」項に示した《「符号付き符号無し」であり、かつaが正の数である場合》の規則である a % (1 + T_MAX) が適用される。ここで、aは256、T_MAXはunsigned char型の最大値つまりUCHAR_MAXで255となる。これらの値を上記の公式に代入してみると256 % (1 + 255)256 % 256 となり、256256割った余りは0になるので、最終的にsi2に代入される値は0になる。つまり、情報欠落発生することになる。

※この「条件と変換結果」の解説は、「汎整数拡張」の解説の一部です。
「条件と変換結果」を含む「汎整数拡張」の記事については、「汎整数拡張」の概要を参照ください。

ウィキペディア小見出し辞書の「条件と変換結果」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「条件と変換結果」の関連用語

条件と変換結果のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



条件と変換結果のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaの汎整数拡張 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS