C++语言程序设计

例：语句 long m=234*456/6;执行后m的值是多少？
从数学计算角度234*456=106704，106704/6=17784，即m=17784。 但实际上m的值为-4064。错在什么地方呢？答案是：234和456都默认为是int型，即最大取值范围为-32768~32767，由于234*456的值远大于32767，故造成数据溢出。C++中数据溢出不会引起编译错误。其结果是该值溢出后剩余部分。具体数值是将这个大整数连续减65536，直到结果在-32768和32767之间为止。
由于隐式运算容易引起错误，所以在算术运算中，常使用强制类型转换。
对于C++一个双目运算符而言，如果两个操作数的类型不一致，操作数的数据类型在表达式的运算中如何进行转换，参见表3-15。

| 表3-15 C++数据类型的转换

条件 | 转换
较高级别操作数的类型为long double | 另一个操作数被转换为 long double
较高级别操作数的类型为 double | 另一个操作数被转换为 double
较高级别操作数的类型为 float | 另一个操作数被转换为 float
较高级别操作数的类型为 unsigned long | 另一个操作数被转换为 unsigned long
较高级别操作数的类型为 long | 另一个操作数被转换为 long
较高级别操作数的类型为 unsigned int | 另一个操作数被转换为 unsigned int
两个操作数为char, unsigned char, signed char，short, unsigned short类型 | 均转换为 int