大家讨论讨论优先级问题提问:   DWORD d=0x000000FF;
   if(d & 0xFF000000 ==0)
      return true;
   else
      return false;   请问最后return 值是什么,为什么?

解决方案 »

  1.   

    关系运算符的优先级低于位运算,返回true,试一下不就知道了,想讨论什么?
      

  2.   


    你试过了吗?再问:DWORD d=0xFF000000; 
      if(d & 0xFF000000 ==0) 
          return true; 
      else 
          return false;   请问最后return 值是什么,为什么?
      

  3.   

    试了一下,是返回false。MSDN中给出的优先级顺序是==在&前面,不知道为什么要这样定,幸好编译的时候有警告。Operator Description 
    . [] () Field access, array indexing, function calls, and expression grouping 
    ++ -- - ~ ! delete new typeof void Unary operators, return data type, object creation, undefined values 
    * / % Multiplication, division, modulo division 
    + - + Addition, subtraction, string concatenation 
    << >> >>> Bit shifting 
    < <= > >= instanceof Less than, less than or equal, greater than, greater than or equal, instanceof 
    == != === !== Equality, inequality, strict equality, and strict inequality 
    & Bitwise AND 
    ^ Bitwise XOR 
    | Bitwise OR 
    && Logical AND 
    || Logical OR 
    ?: Conditional 
    = OP= Assignment, assignment with operation 
    , Multiple evaluation 
      

  4.   

    2楼结果是false,很正常。
    VC6没有警告,我用的是2005。我平时写成都是把关系运算符两端的表达式加括号的,所以不会遇到这个问题。
      

  5.   

    由于==优先于& 所以两段代码返回都为false;
    相当于 d & (d==0)
    由于d不等于0,(d==0)=0
    (d & 0)=0
    最终结果是:
    if(0)
       return true;
    else
       return false;
      

  6.   


    与vc的版本没有关系,将警告级别的编译选项改成/W3就看到了。这是因为==优先级高于&
      

  7.   

    这种问题讨论不太有意义,答错的人也不代表水平低,答对的人也不代表水平高(比如我就答对了^_^),只是编程习惯不同导致长时间不关注这些概念,遗忘也是正常的。
    题外话1:若干年前我背下了所有c标准库函数及其参数原型,现在忘光了,要用还得借助文档。
    题外话2:如果再要我去参加高考,我肯定考不上,大专也考不上。
    题外话3:以前学的java、cb,现在只剩下几个概念还有印象。