C99標準のセクション6.3.1.1には、次のものが含まれています。
以下は、
int
またはunsigned int
が使用される可能性がある場合は常に、式で使用できます。
_Bool
[...]タイプ、、、、 またはint
のビットフィールド。signed int
unsigned int
int
が元のタイプのすべての値を表すことができる場合、値はint
;に変換されます。それ以外の場合は、に変換されますunsigned int
。
これは、符号なしビットフィールドの幅がの幅と等しい場合を除いて、unsigned int
ビットフィールドがにプロモートされることを意味しているように思われます。この場合、最後のフレーズが適用されます。int
int
私は次のプログラムを持っています:
struct S { unsigned f:32; } x = { 28349};
unsigned short us = 0xDC23L;
main(){
int r = (x.f ^ ((short)-87)) >= us;
printf("%d\n", r);
return r;
}
そして、このプログラムを実行する2つのシステム(int
両方のシステムで32ビット)。1つのシステムは、このプログラムが1を出力し、もう1つのシステムは0を出力すると言います。私の質問は、2つのシステムのどちらに対してバグレポートを提出する必要があるかということです。(上記の抜粋のため、0を出力するシステムに対してレポートを提出することに傾倒しています)