C規格から
6.3.1.1
intが元のタイプのすべての値を表すことができる場合(ビットフィールドの場合、幅によって制限されます)、値はintに変換されます。それ以外の場合は、unsignedintに変換されます。これらは整数プロモーションと呼ばれます。
つまりlong int
、式でaを使用すると、 unsigned int
?にダウングレードされるということです。
引用したビットは、その上のテキストによって制限されています。
以下は、int または unsigned int を使用できる式で使用できます。
- 整数変換ランクが int および unsigned int のランクよりも小さい整数型のオブジェクトまたは式。
- _Bool、int、signed int、または unsigned int 型のビット フィールド。
int が元の型のすべての値を表すことができる場合、値は int に変換されます。それ以外の場合は、unsigned int に変換されます。これらは整数プロモーションと呼ばれます。他のすべての型は、整数の昇格によって変更されません。
つまり、またはlong int
に昇格しません。int
unsigned int
「元の型」とは、セクション 6.3 で定義されているように、「[...] 整数変換ランクが int および unsigned int のランク以下の整数型 (int または unsigned int 以外)」を指すと思います。 .1.1.2. しかし、いい試み:)