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

C++内置类型对象转换

2009-08-06 21:04 204 查看
标准的情况下考虑到精度的问题会转换成最宽的数据类型,比如int -> double, int -> float

用高精度的数给低精度的数赋值会截取

算数计算中所有小于int的数均会转换成int

当符号类型和无符号类型转换时,所有的操作数都自动转换为无符号类型。例如

unsigned int a=6;
int b = -20;
int c;
(a+b>6)?(c=1):(c=0);


这段代码最后c的值为1,原因是b被转换成了一个unsigned int类型:一个非常大的正数:2^32-20。

如果操作数是有浮点类型的,比如float,double,long double的,就会转换成浮点型的,如果没有,则操作数都是某种整值类型。那么在确定共同的目标提升类型之前,编译器会将所有小于int 的类型进行整值提升(integral promotion)。在这个过程中char, signed char, unsigned char, short int都首先转换为int。如果unsigned short在机器上存储的是半个字(word),则也被转换成int,否则会变成unsigned int。

在整值提升以后,基本是unsigned long > unsigned int > long > int来执行的,其中的long和unsigned int需要看机器中所占的位置长度,一般32位机器long不够unsigned int的存储,比如我的电脑这两者都是4,而unsigned int是没有负数值的,所以long的长度不够。

所有内容来自《面试宝典》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: