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

2024-04-08

我通过静态分析工具输入了以下代码:

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

“OK”意味着静态分析工具没有抱怨。 “NOT OK”意味着静态分析工具确实抱怨了——声称按位运算的某些操作数不是无符号整数。

最后两行的结果表明括号导致

A。到有符号的实际类型转换

b.静态分析工具认为是到有符号的类型转换

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

但在此之前,我想知道 C 语言是否已知可以执行 (a) 操作?


下面 C 中什么也没做int:例如添加两个时unsigned chars,甚至在加法之前,操作数就会转换为int根据默认促销。

unsigned char u1, u2, u3;
u1 = 0;
u2 = 42;
u3 = u1 + u2;

在最后一行中,首先u1 and u2被转换为int,那么+应用运算符来获得int值,然后该值被转换回unsigned char(当然编译器可以使用快捷方式!)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C中的括号可以改变按位运算的操作数的结果类型吗? 的相关文章

随机推荐