【C++基础语法 2】——类型转换[自动类型转换/强制类型转换]

2. 类型转换

2.1 C++转换方式

  • 自动类型转换(隐式转换):遵循一定的规则,由编译系统自动完成
  • 强制类型转换:把表达式的运算结果强制转换成所需的数据类型
C++自动执行很多类型的转换:
  • 将一种算数类型的值赋值给另一种算数类型的变量时

    double d=5;
    
  • 表达式中包含不同类型时

    double d=2.0;
    int i=10;
    double x=d+i;
    
  • 将参数传递给函数时

2.2 初始化和赋值进行的转换

  • 值赋值给取值范围更大的类型

    short s=12;
    int i=s;
    
  • 值赋值给取值范围更小的类型

    double d=3.1415926;
    float f=d;
    

在这里插入图片描述

  • 0赋值给bool变量时,将被转换为false,非零值转换为true

2.3表达式中的转换

自动类型转换

同一个表达式中包含多种不同的算数类型时,C++将执行两种自动转换:

  • 一些类型在出现时会自动转换
    • boolcharunsigned charsigned char值转换为inttrue转换为1,false转换为0,这些被称为整型提升
    • 如果shortint短,则unsigned short转换为int,如果长度相同,则unsigned short转换为unsigned int,从而确保在对unsigned short提升时不会丢失数据
  • 有些类型在与其他类型同时出现在表达式中时将被转换
    • 当运算涉及两种类型时,较小的类型将被转换为较大的类型。
  • 编译器通过校验表来确定在表达式中执行的转换
    • 如果有一个操作数类型为long double,则将另一个操作数转换为long double
    • 否则,如果有一个操作数类型为double,则将另一个操作数转换为double
    • 否则,如果有一个操作数类型为float,则将另一个操作数转换为float
    • 否则,说明操作数都是整型,因此执行整型提升
强制类型转换

C++允许通过强制类型转换机制显式地进行类型转换

强制类型转换格式:
(typeName) value;typeName (value);

long l=(long) num;
//或者
long l=long(num);

强制类型转换不会修改转换的变量本身,而是创建一个新的、指定类型的值

优先级问题:

(int)a+b;//对a进行强制类型转换
(int)(a+b);//对(a+b)的结果进行强制类型转换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值