您的位置:首页 > 编程语言 > C语言/C++

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

2011-05-04 14:01 309 查看
今天看程序员面试宝典第三版。在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: