C/C++类型转换(9)

整数除法的问题已经带来了困惑,如果运算符只能操作相同的数据类型,那么也会非常的不方便,比如:1+2.5,必须写成1.0+2.5!C提出了三种类型转换,C++在这基础上还提出了三种静态(编译时完成)类型转换和一种动态(运行时)类型转换。

三种类型转换

分别的自动(隐式)类型转换、赋值类型转换和强制(显式)类型转换。语法规则:

1、自动类型转换是针对运算对象类型不同由系统自动完成的,计算1+2.5,系统将int型的1隐式地自动转换成double 类型的1.0,与2.5具有相同类型后进行计算。转换的规则是低到高,少字节到多字节,也就是char -> int -> float -> double

2、赋值类型转换,主要针对赋值运算(包括复合赋值),转换的规则不再是低到高,而是按照赋值的变量的类型进行转换: int x=3.9; 将double类型的3.9赋值给int变量x,规则是去掉小数部分转换成int进行赋值,x=3;   要注意,这里没有四舍五入。

3、强制类型转换,C的语法为: (类型名)    表达式      将表达式的值强制转换成指定的类型,注意类型名加括号: (double)100   --》 100.0  (float) (3.2+1.3)---》4.5f   ( float的4.5);C++可以把括号放到对应的表达式上:double (100)   float(3.2+1.3)   当然C++依然可以使用C的方式。

要获取一个浮点数的整数和小数部分可以用类型转换来完成:

float x=123.456,y ;   int z;   z=x;  (整数部分) y=x-z;   (小数部分)当然也可以用强制类型转换

判断一个数是否为完全平方数(25 36 49等等是某整数的平方),也可以利用类型转换,方法是:先开方(数学库 sqrt),然后转整型再平方,判断是否相等  (int)sqrt(x) * (int)sqrt(x) == x  

C++ 4种特有类型转换  (可以暂时跳过)

1、static_cast 类似于 C 语言中的类型转换,可以进行无条件类型转换。

    int x=3;   double y = static_cast <double> (x);

2、reinterpret_cast 应用于指针、引用等之间的转换,这种转换提供了很强的灵活性,但转换的安全性只能由程序员的细心来保证了。例如,程序员执意要把一个 int* 指针、函数指针或其他类型的指针转换成 string* 类型的指针也是可以的。

3、const_cast 仅用于进行去除 const 属性的转换,它也是四个强制类型转换运算符中唯一能够去除 const 属性的运算符。

   const string s = "Inception";

   string& p = const_cast <string&> (s);   引用去const

   string* ps = const_cast <string*> (&s);   指针去const

4、dynamic_cast 是运行时的类型转换,专门用于对象指针之间的转换,将多态基类的指针或引用强制转换为派生类的指针或引用,而且能够检查转换的安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值