与前一个问题有关,我不理解MISRA C 2004的一些规则。
在ISO C99 draft 2007中,6.5节§4:
一些运算符(单目运算符~和二元运算符<<、>>、&、^和|,总称为位运算符)要求其操作数具有整数类型。这些运算符产生的值取决于整数的内部表示,并且对于有符号类型具有实现定义和未定义的方面。
好的,使用带符号整数进行位运算可能会产生未定义的行为(并且没有意义)。
一个好的解决方案是使用显式转换为更宽的无符号整数类型,以绕过整数提升,然后不使用带符号值进行位运算(请参见我之前问题的相关答案)。
但是在MISRA C 2004中,使用小的无符号整数与位运算符是可能的(例如规则10.5)。为什么会这样,如果整数提升导致使用带符号值与位运算符?我认为我还没有理解清楚一些事情。
int
中,它将被提升为有符号的int
。 - Lundin