C中的括号是否可以更改按位运算的操作数的结果类型?

tal*_*ity 5 c type-conversion bitwise-operators parentheses

我通过静态分析工具提供了以下代码:

u1 = (u1 ^ u2); // OK

u1 = (u1 ^ u2) & u3;  // NOT OK

u1 = (u1 ^ u2) & 10; // NOT OK

u1 = (u1 ^ u2) & 10U; // NOT OK

u1 = (unsigned char)(u1 ^ u2) & 10U; // OK

u1 = (unsigned char)(u1 ^ u2) & u3;  // OK
Run Code Online (Sandbox Code Playgroud)

"OK"表示静态分析工具没有抱怨."不OK"指的是静态分析工具没有抱怨 - 声称按位操作的某些操作数不是一个无符号整数.

最后两行的结果表明括号正在引起

一个.要签名的实际类型转换

湾 静态分析工具认为是签名的类型转换

我将向静态分析工具开发人员询问(b).

但在此之前,我想知道C语言是否可以做(a)?

pmg*_*pmg 6

C中没有任何内容在下面完成int:例如,当添加两个时unsigned chars,甚至在添加之前,操作数将int根据默认促销转换为.

unsigned char u1, u2, u3;
u1 = 0;
u2 = 42;
u3 = u1 + u2;
Run Code Online (Sandbox Code Playgroud)

在最后一行中,第一u1u2被转换到int,则+操作者施加到获得int的值,然后该值被转换回unsigned char(当然,编译器可以使用快捷方式!)