重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

「汎整数拡張」の「通常の算術型変換」に

<一方のオペランドが型unsigned long intをもつ場合、他方のオペランドをunsigned long intに型変換する。>

この下に「そうでない場合」が、一方のオペランドが型long intをもつ場合が二つ続きます。

<一方のオペランドが型unsigned intをもつ場合、他方のオペランドをunsigned intに型変換する。>

<>2つの例はlong型やint型よりもunsigned型の上位に位置づけています。
例として
  if(-1<1u)は偽になります。
何ゆえにunsigned型の上位性をしているのでしょうか。宜しく願います。

A 回答 (1件)

まず、「汎整数拡張」の「通常の算術型変換」というのは変です。


汎整数拡張または整数拡張は、両方のオペランドが整数型の場合に、通常の算術型変換の一過程として行われます。また、シフト演算子など、通常の算術型変換が行われない場合でも汎整数拡張(または整数拡張)が行われます。

次に、

> 何ゆえにunsigned型の上位性をしているのでしょうか。宜しく願います。

については、想像の域を出ませんが、整数変換順位が同じであれば符号無し整数型のほうが大きな絶対値を扱えるからではないでしょうか?

この回答への補足

if(-1<1u)を例にとりますと、unsigned int型int型を16ビットで考えますと、1は最後のビットが1で後は0になり、-1は全てのビットが1になります。-1をunsigned int型に変換すれば(-1<1u)は偽になるわけですが、そこの所が理屈としてはわかるのですが、c言語という体系で何ゆえこのように規則化されたのかしっくりしていません。
そこのところを宜しく願います。

補足日時:2008/10/09 07:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!