C++操作数的类型转换(一)

来源:互联网 发布:python scrapy 爬虫 编辑:程序博客网 时间:2024/05/18 03:48
 

C++中,进行算术运算前通常需要对操作数进行类型转换,特别是对两个类型不同的操作数,往往要把它们转换成相同类型。算术运算的结果类型与转换后的操作数类型相同。

       C++的类型转化方式有两种:隐式转换和显式转换。隐式转换由编译程序按照某种预定的规则进行自动转换;显式转换由写程序的人在程序中用类型转换操作符明确地指出转换。

       当操作数的类型为算术类型或者枚举类型时,在进行算术运算前,编译程序将按照常规算术转换规则(usual arithmetic conversion自动进行操作数类型转换,其转换规则如下:

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

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

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

d)      否则,先对操作数进行整型类型提升转换(integral promotion),如果转换后操作数的类型不一致,则按(e)以后的类型再进行转换。整型提升转换规则是:

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

¨         bool型转换成int型,false0true1

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

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

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

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

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

注:如果(h)仍不满足,则根据(d)的整型提升规则可知,两个操作数都已是int型了。

       隐式类型转换有时不能满足要求,而需要在程序中显式指出转换,即进行显式转换。显式转换又称强制类型转换,可以用强制类型转换操作符来实现,其格式为:

              <类型名>(<操作数>)   

          

(<类型名>)<操作数>

注:

¨         从表示范围大的类型强制转换到表示范围小的类型,有时会丢失精度。

不管是显式转换还是隐式转换,都不会改变被转换的操作数的值,转换得到的结果将存储在临时的存储单元中。
原创粉丝点击