C99 标准的第 6.3.1.1 节包含:
以下可以用在表达式中,只要可以使用
int
orunsigned int
:
_Bool
[...] ,int
,signed int
, or类型的位域unsigned int
。如果 an
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;
}
和两个系统来执行这个程序(int
在两个系统上都是 32 位的)。一个系统说这个程序打印 1,另一个说它打印 0。我的问题是,我应该针对这两个系统中的哪一个提交错误报告?(由于上面的摘录,我倾向于针对打印 0 的系统提交报告)