今天看程序员面试宝典第三版。在P38的例子中,~比>>的优先级高,+比>>高。程序代码如下:
#include<iostream>
using namespace std;
int main()
{ unsigned char a=0xA5;
unsigned char b=~a>>4+1;
printf("b=%d/n",b);
return 0; }
解析:char signed char unsigned char和short int参与运算时会提升为类型int. a=0XA5 提示为0X000000A5 然后进行求反得到0XFFFFFF5A 然后移位得到0X0FFFFFFA 最终转化成u char 得到0XFA ,既是输出结果16*15+10=250.(当为char时那么就是变量的最高位补齐,unsigned补位时用0补起 ) 这是台某CPU公司的面试题。程序输出结果是250。
原因如下:
因为unsigned char和char类型变量在参与运算的时候,会首先被提升为int类型,计算完毕再转换成unsigned char 或char类型。从这个正确的角度,就可以得到正确的结果。
附录c++运算符优先级:http://www.cppreference.com/operator_precedence.html Precedence Operator Description