C99 标准的第 6.3.1.1 节包含:
以下可以用在表达式中,只要可以使用
intorunsigned 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 的系统提交报告)