详解操作符

文章目录

      • 1. 操作符的分类
      • 2.算数操作符
      • 3.移位操作符
        • 3.1本质
        • 3.2分类
          • 3.2.1<< 左移操作符
        • 3.2.2>> 右移操作符
        • 4.位操作符
        • 5.赋值操作符
      • 6. 单目操作符
        • 6.1 单目操作符介绍
        • 6.2sizeof和数组
      • 7. 关系操作符
      • 8. 逻辑操作符
      • 9. 条件操作符
      • 10. 逗号表达式
      • 11. 下标引用、函数调用和结构成员
      • 12. 表达式求值
        • 12.1 隐式类型转换(小于int的类型转化)
        • 12.2 算术转换(int类型及其以上的类型转化)
      • 12.3 操作符的属性

1. 操作符的分类

算术操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
下标引用、函数调用和结构成员

2.算数操作符

+ - * / %

** 区别"/"和“%”**

  1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。
  2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
    在这里插入图片描述3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。

3.移位操作符

3.1本质

移动的是二进制的位

补充:数据的二进制表示
1.各种数据的表示
详解操作符_第1张图片
2.整数的二进制表示
详解操作符_第2张图片

3.2分类

<< 左移操作符
>> 右移操作符
    
注:移位操作符的操作数只能是整数。

3.2.1<< 左移操作符

详解操作符_第3张图片

3.2.2>> 右移操作符

详解操作符_第4张图片
正数的右移符号不变
负数的逻辑右移也不发生变化
但是算数右移发生变化

4.位操作符

详解操作符_第5张图片
详解操作符_第6张图片

5.赋值操作符

赋值操作符是一个很棒的操作符,他可以让你得到一个你之前不满意的值。也就是你可以给自己重新赋值。

赋值操作符可以连续使用,比如:
int a = 10;
int x = 0;
int y = 20;
a = x = y+1;//连续赋值
这样的代码感觉怎么样?
那同样的语义,你看看:
x = y+1;
a = x;
这样的写法是不是更加清晰爽朗而且易于调试。

复合赋值符
详解操作符_第7张图片

6. 单目操作符

6.1 单目操作符介绍

详解操作符_第8张图片
sizeof的注意
在这里插入图片描述
变量的括号可以省略;

~的解释
对补码取反
详解操作符_第9张图片
!的解释
在这里插入图片描述

6.2sizeof和数组

详解操作符_第10张图片
函数传值为数列首地址

注意首地址为指针大小都为4字节

7. 关系操作符

详解操作符_第11张图片

8. 逻辑操作符

详解操作符_第12张图片
详解操作符_第13张图片

9. 条件操作符

exp1 ? exp2 : exp3

详解操作符_第14张图片

10. 逗号表达式

exp1, exp2, exp3, …expN

详解操作符_第15张图片

11. 下标引用、函数调用和结构成员

1.下标引用操作符

详解操作符_第16张图片
2.函数调用操作符
详解操作符_第17张图片

3.访问一个结构的成员
在这里插入图片描述
详解操作符_第18张图片

12. 表达式求值

表达式求值的顺序一部分是由操作符的优先级和结合性决定。
同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型。

12.1 隐式类型转换(小于int的类型转化)

详解操作符_第19张图片

详解操作符_第20张图片
详解操作符_第21张图片

12.2 算术转换(int类型及其以上的类型转化)

详解操作符_第22张图片

12.3 操作符的属性

复杂表达式的求值有三个影响的因素。

  1. 操作符的优先级
  2. 操作符的结合性
  3. 是否控制求值顺序。
    两个相邻的操作符先执行哪个?取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性。
    操作符优先级
    详解操作符_第23张图片
    ③中的是只用&&和||和?:和,
    问题代码
    详解操作符_第24张图片

总结:我们写出的表达式如果不能通过操作符的属性确定唯一的计算路径,那这个表达式就是存在问题
的。

你可能感兴趣的:(算法,c++,开发语言)