vs编译之后的代码彻底颠覆了我的信仰

2013-11-10 19:41:08 +08:00
 wzyxidian
求解释这个代码的输出是什么情况,c语言中~的优先级是明明高于>>,结果第一个输出竟然跟第三个输出相同的结果,这是为什么
#include <stdio.h>
void main()
{
unsigned char a=0xA5;
unsigned char b=~a>>5;

unsigned char c1=~a;
unsigned char b1=c1>>5;

unsigned char c2=a>>5;
unsigned char b2=~c2;

printf("%d,%d,%d\n",b,b1,b2);


}
3269 次点击
所在节点    问与答
6 条回复
marchtea
2013-11-10 20:35:03 +08:00
这个和编译器无关,和类型有关.你用gcc编译也是一样的效果.
rteta
2013-11-10 20:44:44 +08:00
LZ正解,和类型有关,话说C语言的 unsigned类型巨复杂,一直搞不明白……
learnshare
2013-11-10 21:05:56 +08:00
用 VS 学习 C 么?不建议学习的时候用这么复杂的 IDE,光 IDE 就要学上好久。
xpfd
2013-11-10 22:26:23 +08:00
对于类似的情况,随手加个(),方便阅读而且会减少出错的可能性,保持一个好的编程习惯,何乐而不为
xujialiang
2013-11-11 10:18:30 +08:00
先搞懂数据在内存中是如何存放的。然后就清楚了。
ljhero
2013-11-11 10:33:13 +08:00
看下编译后的汇编代码,明白各语句对应的操作指令就清楚了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/88751

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX