C程序的意外行为

时间:2014-05-08 06:39:56

标签: c

下面是一个C程序,它希望使用按位运算将整数乘以5。但是,当我运行此程序时,它会产生意外的输出。我知道有些东西我搞砸了,我看不到。关于这个家伙和女孩的任何帮助?

  #include <stdio.h>
  #define PrintInt(expr) printf("%s : %d\n",#expr,(expr))
  int FiveTimes(int a)
  {
      int t;
      t = a<<2 + a;
      return t;
  }

  int main()
  {
      int a = 1, b = 2,c = 3;
      PrintInt(FiveTimes(a));
      PrintInt(FiveTimes(b));
      PrintInt(FiveTimes(c));
      return 0;
  }

1 个答案:

答案 0 :(得分:4)

这是&#34;运算符优先级&#34;:&#34;&lt;&lt;&#34;优先级低于&#34; +&#34; - 所以您的代码实际计算a << (2 + a),而它应该是(a << 2) + a。后者是修复。