han*_*ish 3 c bit-shift operator-precedence
我想知道以下C程序的输出是如何32的.请给我一步一步的指导.
main()
{
int a=4,b=2;
a=b<<a+b>>2;
printf("%d",a);
}
Run Code Online (Sandbox Code Playgroud)
小智 5
询问优先级,+优先级高于<<和>>,所以表达式是
b << (a + b) >> 2
Run Code Online (Sandbox Code Playgroud)
评估为
2 << (4 + 2) >> 2 = 2 << 6 >> 2
Run Code Online (Sandbox Code Playgroud)
现在,有再决定哪一部分首先计算- <<并>>具有相同的优先级,但关联性就派上用场了,对于<<和>>其左到右,所以这意味着最左边的操作者首先计算:
(2 << 6) >> 2 = 128 >> 2 = 32
Run Code Online (Sandbox Code Playgroud)
编辑:一步完成所有操作,尊重优先级和关联性,原始表达式b<<a+b>>2读取以下完全括号:
((b << (a + b)) >> 2
Run Code Online (Sandbox Code Playgroud)
对于未来的疑虑,有一个表格显示优先级和关联性是非常有帮助的.或者只是使用一些"多余的"括号来使表达对人类更具可读性;)