C++内置类型对象转换
2009-08-06 21:04
204 查看
标准的情况下考虑到精度的问题会转换成最宽的数据类型,比如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的长度不够。
所有内容来自《面试宝典》
用高精度的数给低精度的数赋值会截取
算数计算中所有小于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的长度不够。
所有内容来自《面试宝典》
相关文章推荐
- C++ - 内置类型对象之间的标准转换
- C++内置类型对象之间的隐式转换
- C++内置类型对象之间的转换
- 关于C++中string对象向int、float、double类型的转换的方法汇总
- C++ 学习笔记(14)重载运算与类型转换、函数对象、function库
- C++面向对象中的向上转换 向下转换 以及OOP相关的类型转换
- 【C++】学习笔记草稿版12(类对象的类型转换)
- C++冲刺(二)内置类型转换
- 用标准c++进行string与各种内置数据类型的转换
- c++ 使用stringstream对象简化类型转换
- C++ 转换类型运算符 调用构造函数将变量转化成为一个对象的成员变量
- 用标准C++进行string与各种内置类型数据之间的转换
- C++ 操作符重载、函数对象及类类型转换
- python内置对象类型转换简记
- C++ 无符号类型的运算对象参与的类型转换
- 用标准C++进行string与各种内置类型数据之间的转换
- 【C++】使用stringstream对象简化类型转换
- C++ Pirmer : 第十五章 : 面向对象程序设计之基类和派生的定义、类型转换与继承与虚函数
- 用sstream实现C++中的内置类型转换
- C++对象类型转换问题概括总结