• 第五章 表达式


    第五章  表达式

    一、算术操作符:

    一元操作符: +/-  正负号; 优先级最高

    二元操作符: *   /  % 乘、除、求余, +  -  加减号, 乘除求余高于加减

    注意:两个整数相除,结果仍为整数,小数部分会被截断,21/6=3;

                       A%B ,A对B求余,则B一定为整数。

    二、关系操作符和逻辑操作符:

    包括: 逻辑非(!)、 小于(<)、小于等于(<=)、大于(>)、大于等于(>=),相等(==)、不等(!=)、逻辑与(&&)、逻辑或(||)

    注意:关系操作符(<、>、<=、>=) 不应该串接使用,因为关系操作符返回bool类型结果。例如: if ( I < j < k ) ;  只要k大于1,表达式就为true,应该写为if ( I < j && j < k ) ;

    三、位操作符:使用整型操作数,将其整型操作数视为二进制位的集合,为每一位提供检验和设置功能。

    单目:位求反(~)  双目:左移(<<) 右移(>>) 位与(&) 位异或(^) 位或(|)

    例子:

    位求反: bits  为 10010111(二进制)     ~bits  为  01101000

    左移:   bits << 1  左移一位,得   00101110

    右移:   bits >> 1  右移一位,的     01001011

    (移位操作的右操作数不可以是负数)

    设:         b1 为 01100101

                       b2 为 10101111

    那么b1 & b2为00100101(b1,b2对应位数都为1则b1&b2的对应位数才为1,否则为0)

    位异或b1^b2为11001010(b1,b1对应位只有一个1时,b1^b2对应位数才为1,否则为0)

    位或b1 | b2为11101111(b1,b2对应位有一个或两个1时,b1|b2对应位数为1,否则为0)

    注意:位与,位异或,位或都需要两个整型操作数!

    总结:位与:1对应1才得1;1-0,0-1,0-0得0;

             位异或:1-0,0-1得1; 1-1,0-0得0;

             位或:1-0,1-1,0-1 得1 ; 0-0 得0;

    四、赋值操作符: “ = ”

    1、赋值表达式的值是其左操作数的值,其结果的类型为左操作数的类型。

    2、赋值操作具有右结合特性: ival = jval = 0; (都是0)

    3、赋值操作符的优先级低于不等操作符: if( (i=get_value() ) != 42 ) 其中赋值操作必须加上括号。

    4、复合赋值操作:+=, -=, *=, /=, %=, <<=,  >>=, &=, ^=, |=

    五、自增和自减操作符

    1、自增操作的优先级高于解引用操作,因此*iter++ 等效于*(iter++)。

    六、箭头操作符

    1、如果有一个指向Sales_item 对象的指针(或迭代器),则在使用点操作符前,需要对该指针(或迭代器)进行解引用:   (*sp).same_isbn(item2) ;

    2、解引用操作定义了一个同义词:箭头操作符(->),(*p).foo ;等价于 p->foo ;

    七、条件操作符:  cond  ?  expr1  :  expr2

    1、cond 是一个条件判断表达式,条件操作符首先计算cond 值,如果值为0,条件为false,如果值为非0,条件为true;条件为true时计算expr1,否则计算expr2.

    2、在使用时,必须严格使用圆括号将条件操作符括起来。

    八、sizeof操作符:作用是返回一个对象或类型名的长度,返回值的类型为size_t。

    使用sizeof的结果部分地依赖所涉及的类型:

    1、  对char类型或值为char类型的表达式做sizeof操作保证得 1.

    2、  对引用类型做sizeof操作将返回存放此引用类型对象所需的内存空间大小。

    3、  对指针做sizeof操作将返回存放指针所需的内存大小;注意,如果要获取该指针所指向的对象的大小,则必须对该指针进行解引用。

    4、  对数组做sizeof操作等效于将其元素类型做sizeof操作的结果乘上数组元素的个数,因为sizeof返回整个数组在内存中的存储长度。

    九、逗号操作符: 逗号表达式是一组由逗号分隔的表达式,这些表达式从左向右计算。逗号表达式的结果是其最右表达式的值。

    十、复合表达式:操作数的分组结合方式取决于操作符的优先级和结合性。

    结合性见P147

    两个指导原则有助于处理复合表达式:

    (1)       在表达式上按程序逻辑要求使用圆括号强制操作数的组合。

    (2)       如果要修改操作数的值,则不要在同一个语句的其他地方使用该操作数。

    十一、new和delete 表达式

    1、  在动态创建对象时,总是对它做初始化也是一个好办法。

    2、  对于内置类型,采用不同初始化方式则有显著的差别:

    Int  *pi = new int;                 没有初始化;

    Int  *pi = new int();          初始化为0;

    (值初始化的()语法必须置于类型名后面,而不是变量后。)

    3、  delete pi; 如果指针指向的不是用new分配的内存地址,则在该指针上使用delete时不合法的!

    注意:一旦删除了指针所指向的对象,立即将指针置为0,这样就非常清楚地表明指针不再指向任何对象。

    4、尽管程序员不能改变const对象的值,但可以撤销对象本身!

  • 相关阅读:
    详细聊聊k8s deployment的滚动更新(一)
    更新k8s镜像版本的三种方式
    深入理解docker信号机制以及dumb-init的使用
    10分钟教你理解反射
    nodejs的交互式解释器模式常用命令
    nrm的安装和使用
    复杂sql语句之单字段分类count计数和多字段count计数
    navicat连接mysql出现2059
    mongodb常规操作语句
    System.Web.NullPointerException
  • 原文地址:https://www.cnblogs.com/ss815367696/p/2588827.html
Copyright © 2020-2023  润新知