C++内置类型对象转换

来源:互联网 发布:2016淘宝销量排名 编辑:程序博客网 时间:2024/04/29 02:46

标准的情况下考虑到精度的问题会转换成最宽的数据类型,比如int -> double, int -> float

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

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

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

这段代码最后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的长度不够。

所有内容来自《面试宝典》

原创粉丝点击