《C++ Primer Plus》阅读笔记(第3章)

3.4:
    C++运算符:加减乘除,求模。    运算符和操作数构成了表达式。    
3.4.1:
    当多个运算符被用于一个操作数时,用优先级和结合性判断先使用哪个运算符。优先级和常规数学方法一样(先乘除后加减,从左到右)。当优先级相同时,乘除从左到右。 
3.4.2:
    做除法(/)时,整数除法丢弃小数点,如果有一个操作属是浮点数,则结果为浮点数。
3.4.3:
    求模运算符。
3.4.4:
    C++自动执行很多类型转换:
            1.初始化和赋值进行的转换
                不同类型的变量赋值时,将值转换为接受变量的类型。        小转大没问题,大转小可能会丢失数据。(例如浮点转整形,转换采取截取,而非四舍五入)

            2.以{ }方式初始化时进行的转换
                { }初始化被称为列表初始化。        列表初始化不允许缩窄(例如,不允许将浮点数赋值给整形),在能够储存的下的前提下,允许各种整形之间互相转换以及整形转换为浮点型。
                有可能超出上限的转换不会被允许(如int x=22      char a=x,int的上限远比char高)

            3.表达式中的转换
                当同一个表达式中出现两种不同算数类型时,有两种情况:
                    第一种情况:自动转换(所有类型小于int,无浮点类型)
                        在计算表达式时,C++将所有小于int的的算数类型转换为int(ture转换为1,false转换为0)这样的转换称之为整形提升
                        具体过程:计算时将所有类型转换为int,计算完再将结果转换为将要赋值的类型(要赋值给什么类型就转换为什么类型)        
                        这样转换的原因是int是最自然的类型,运算速度最快。
                        如果short比int短,则将unsigned short转换为int。如果short长度与int相等,则将unsigned short转换为unsigned int。这样的转换防止了数据丢失。
                    第二种情况:较小的类型转换为较大的类型(有大于int的类型,包含浮点类型)
                        在表达式中有浮点数时,C++将级别低的(较小的)转换为级别高的(较大的)
                        在表达式中无浮点数时,且级别高的类型可表示级别低的类型的所有取值时,将级别低的转换为级别高的,无论是否有符号。
                        在表达式中无浮点数,且级别高的类型不能表示级别低的类型的所有取值时,将两个操作数都转换为两个类型中的有符号类型的无符号版本。
            4.传递参数时的转换
                一般情况下用不到,传递参数时的转换通常由C++函数原型控制

            5.强制类型转换
                强制类型转换时的两种格式:
                (将int型变量x修改为char型)
                    int x=55
                    char(x)    // C语言格式
                    (char)x      // C++格式

                C++还引入了4个强制类型转换运算符,这里书中只介绍了其中一个:
                    (将int变量x修改为char型)
                        int x=55
                        static_cast<char>(x)

                static_cast<>运算符相较于传统强制类型转换更为严格,这是因为传统强制类型转换有过多的可能性且过于危险(暂时不必深究)

    先转换再相加和先相加再转换是不一样的,结果可能不同(因数据而异)。
    最常见的使用强制类型转换的原因:使一种格式的数据满足不同的需要。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值