[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
#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
相关文章推荐
- [C/C++]c++运算符优先级和运算中类型转换问题!
- C++中有符号类型(int)和无符号类型(unsigned int)混合算术运算的类型转换会出现的问题
- C++中有符号类型(int)和无符号类型(unsigned int)混合算术运算的类型转换会出现的问题
- C隐式类型转换与运算符优先级
- C++在多重继承下的指针类型强制类型转换的一些问题
- C++ 学习笔记(14)重载运算与类型转换、函数对象、function库
- c++中按位取反运算,类型转换,扩位
- char*数组(c类型字符串)和c++中的string的转换、字符串比较、char*数组等问题
- C++学习之类型转换带来的问题
- C++、C中有关double、float类型转换成int型,及取整,丢失精度问题。
- C++中四种类型转换以及const_cast是否能改变常量的问题
- C++中四种类型转换以及const_cast是否能改变常量的问题
- 类型转换和运算符优先级问题
- c++算术运算和位运算中类型转换和类型提升规则和方法
- char*数组(c类型字符串)和c++中的string的转换、字符串比较、char*数组等问题
- 类型转换问题(java会把byte,short和char的运算操作转换为int类型即低精度自动向高精度转换)
- C++从char*到LPCWSTR的数据类型转换问题
- 面试题:类型转换与优先级问题
- C++对象类型转换问题概括总结
- 【C++】重载运算符号时的函数返回值类型问题