与上一个问题有关,我无法理解 MISRA C 2004 的一些规则。
在ISO C99 草案 2007中,第 6.5 节第 4 节:
某些运算符(一元运算符 ~ 和二元运算符 <<、>>、&、^ 和 |,统称为按位运算符)需要具有整数类型的操作数。这些运算符产生的值取决于整数的内部表示,并且具有符号类型的实现定义和未定义方面。
好的,使用带按位运算符的有符号整数会产生未定义的行为(并且没有意义)。
一个好的解决方案是使用显式转换为更广泛的无符号整数类型以绕过整数提升,然后不要将有符号值与位运算符一起使用(请参阅我上一个问题的相关答案)。
但在 MISRA C 2004 中,可以使用带有位运算符的小型无符号整数(例如规则 10.5)。为什么,如果积分提升导致使用按位运算符的有符号值?我想我不明白一些事情。