数据类型转换及注意事项

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


个人技术网站


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值