现在的位置: 首页 > 综合 > 正文

[C/C++]c++运算符优先级和运算中类型转换问题!

2013年06月08日 ⁄ 综合 ⁄ 共 559字 ⁄ 字号 评论关闭

今天看程序员面试宝典第三版。在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

抱歉!评论已关闭.