C/C++ 回顾总结之隐式类型转换

隐式类型转换

隐式类型转换是指由编译器程序按照某种预定的规则进行自动转换。对于不同的操作,隐式转换规则会有所不同。下面针对不同种类的操作符分别介绍它们的隐式转换规则。

(1)       算术操作的类型转换

1)         如果其中一个操作数类型为long double,则另一个操作数也转换成long double

2)         如果其中一个操作数类型为double,则另一个操作数也转换成double

3)         如果其中一个操作数为float,则另一个数转换成float类型。

4)         先对操作数进行整型提升转换,如果操作数的类型不一样,则按5)以后的规则再进行转换。整形提升转换规则是:

                         i.              对于charsigned charunsigned charshort intunsigned short int类型,如果int型能够表示它们的值,则这些类型转成int,否则这些类型转换成unsigned int

                       ii.              Bool类型转换成int型,false0true1.

                      iii.              wchar_t和枚举类型转换成下列类型中第一个能表示其所有值的类型:intunsigned intlong intunsigned long int

5)         如果其中一个操作数类型为unsigned long int,则另一个操作数转换成unsigned long int 类型。

6)         如果一个操作数为long int,另一个操作数类型为unsigned int,那么如果long int能表示unsigned int的所有值,则unsigned int转换成long int,否则两个操作数都转化成unsigned long int类型。

7)         如果一个操作数为long int,则另一个操作数转换成long int类型。

8)         如果一个操作数类型为unsigned int,则另一个操作数转换成unsigned int类型。

(在上述的转换规则中,如果8)仍不满足,则根据4)的整形提升规则可知,两个操作数都已是int型了)

同时需要注意的是,把位数少的有符号整型转换成位数多的有符号整型是,需要在高位扩充符号位。另外把有符号整型转换成相应的(位数相同的)无符号整型时,不会改变有符号数据的值,只是把它在内存中的二进制位按照无符号整数来解释,这时可能会导致错误。

(2)       关系操作的类型转换

对于关系操作符,当操作数是算术类型和枚举类型时,编译程序将按常量算术转换规则对它们进行转换。

(3)       逻辑操作的类型转换

对于逻辑操作符,C++允许对算术类型、枚举类型和指针类型数据进行逻辑操作,但在操作前需要对它们进行逻辑类型转换。逻辑类型转换的规则是:对于算术型和枚举型,零转成false,非零转成true;对于指针型,空指针转成false,非空指针转成true

(4)       位操作的类型转换

对于逻辑位操作,编译程序将会按照常规算术转换规则对操作数进行类型转换,运算结果的类型与转换后的操作数类型相同。

对于移位操作,编译程序会对操作数按整型提升规则进行类型转换,运算结果的类型与第一个操作数类型(进行类型转换之后)相同。

(5)       赋值操作符的类型转换

对于赋值操作,当赋值操作的两个操作数类型不同时,编译程序将按赋值转换规则进行隐式类型转换,即把右边操作数转换成左边的操作数类型。在C++中,各种算术类型之间可以进行类型转换,其中,将实话类型转换成整型时,小数部分将舍去,并且不进行“四舍五入”。

(6)       条件操作符的类型转换

对于条件操作符,第一个操作数也可以是算术型、枚举型以及指针类型,编译程序对其进行逻辑转换:0转成false;非0转成true。第二,三个操作数可以是任意类型,当它们的类型不同时,编译程序将对它们进行类型转换。其中,对于算术类型和枚举类型,编译程序将按常规算术转换规则进行转换。条件操作的结果类型为转换之后的第二、三个操作数类型。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值