首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C中的圆括号可以改变位运算的操作数的结果类型吗?

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

Stack Overflow用户
提问于 2011-09-13 18:20:59
回答 2查看 374关注 0票数 5

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

代码语言:javascript
复制
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)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-13 18:37:39

C中没有在int下面做任何事情:例如,当将两个unsigned chars相加时,即使在相加之前,操作数也会根据默认的提升转换为int

代码语言:javascript
复制
unsigned char u1, u2, u3;
u1 = 0;
u2 = 42;
u3 = u1 + u2;

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

票数 6
EN

Stack Overflow用户

发布于 2011-09-13 18:36:05

这是因为,在C中,两个unsigned char上的操作的结果类型是int。静态分析工具正确地(尽管不是非常直观地)报告&已应用于int

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7400258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档