数据类型转换及注意事项

来源:互联网 发布:大规模并行处理数据库 编辑:程序博客网 时间:2024/04/30 06:10

                         在C++中存在三种类型的数据类型转换。1.是隐匿自动转换   2.强制类型转换  3.赋值类型自动截断转换。而对于这三种转换存在相应的规则,它们分别就下面的三种规则进行相应的处理。

1.就长不就短原则:即参与表达式计算的变量遵从类型长度最大的原则,在参加运算前把所有变量类型转换成类型最大的那种类型。也称为类型自动提升。这种方式进行的运算具有最大的安全性。所有参与数据都在最大的空间时进行计算,不会出现截断及数据错误等现象。


2.就左不就右原则:此原则用在相应的赋值阶段,即赋值表达式右边的类型要遵从左边的类型。也就是说一切向左边看齐,不管这个类型是大还是小。这种类型转换存在相应风险。因为右边的数据类型可能比左边的要大,而把一个大的物体放入一个小的物体中,必然会发生溢出现象。此时就会发生数据截断,导致截断后数据错误。

例:

int a;

long b = 65536;

a = b;  此时a的结果为0 

此时b的在内存中所存在的二进制是:

00000000  00000001 00000000  00000000

而a在内存中只占两个字节,所以b截断后,就把b的低16位赋值给了a,此时a在内存中所存在的二进制就是

00000000  00000000    //所以a的结果为0


3.强制类型转换:即把变量类型强制转换,格式:(类型)变量a   //此时就是把变量a强制转换成指定的类型。此种转换形式也具有截断的风险,极有可以导致数据错误。形式与第二条相似。


类型转换注意事项:

1.参与表达式计算的变量或常量,类型转换时只是产生一个临时的数据类型及值,而原来的变量的数据及数据类型并不会改变。

2.数据类型转换消耗系统时间,过多的类型转换降低程序运行效率。

3.运算结果存入变量的类型转换,不管是自动还是强制的,当把数据较长的结果存入数据较短的变量时,会发现截断,将截去超长的部分,造成数据错误。


个人技术网站