Pas*_*uoq 11 c c99 bit-fields
C99标准的第6.3.1.1节包含:
以下内容可用于任何地方
int或unsigned int可能使用的表达式:[...]类型的位字段
_Bool,int,signed int,或unsigned int.如果a
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;
}
Run Code Online (Sandbox Code Playgroud)
还有两个系统来执行这个程序(int在两个系统上都是32位).一个系统说这个程序打印1,另一个系统说它打印0.我的问题是,我应该在哪两个系统中提交错误报告?(我倾向于针对打印0的系统提交报告,因为上面的摘录)