一部のバイナリ演算子は、結果の型でもある共通の型を生成するために、オペランドの型を変換します。これらの変換は、通常の算術変換と呼ばれます。-std=c11 の場合、通常の算術変換は 9899:2011 ISO/IEC C プログラミング言語規格に定義されています。-std=c99 の場合、通常の算術変換は 9899:1999 ISO/IEC C プログラミング言語規格に定義されています。-std=c89 -pedantic の場合、通常の算術変換は、9899:1990 ISO/IEC C プログラミング言語に定義されています。-std=c89 -pedantic=no および -Xs フラグの場合、通常の算術変換は、次のように定義されます。
どちらか一方のオペランドが long double 型である場合、もう一方のオペランド は long double に変換されます。
一方のオペランドが double 型を持つ場合、もう一方のオペランドは double に変換されます。
一方のオペランドが float 型を持つ場合、もう一方のオペランドは float に変換されます。
これ以外の場合は、汎整数拡張が両方のオペランドで実行されます。次の規則が適用されます。
一方のオペランドが unsigned long long int 型を持つ場合、もう一方の演算子は unsigned long long int に変換されます。
一方のオペランドが long long int 型を持つ場合、もう一方の演算子は long long int に変換されます。
一方のオペランドが unsigned long int 型を持つ場合、もう一方の演算子は unsigned long int に変換されます。
それ以外の場合、–m64 でコンパイルするとき、1 つのオペランドが long int 型を持ち、もう一方が unsigned int 型を持つ場合、両方のオペランドは unsigned long int に変換されます。
一方のオペランドが long int 型を持つ場合、もう一方のオペランドは long int に変換されます。
一方のオペランドが unsigned int 型を持つ場合、もう一方のオペランドは unsigned int に変換されます。