操作符(详解)

简介: 操作符(详解)

1.操作符分类

操作符简单来说是执行某种特定功能的符号。

  1. 算数操作符
  2. 移位操作符
  3. 位操作符
  4. 赋值操作符
  5. 单目操作符
  6. 关系操作符
  7. 逻辑操作符
  8. 条件操作符
  9. 逗号表达式
  10. 下标引用、函数调用和结构成员

2. 算数操作符

+    -   *   /  %

算数操作符是我们最熟悉的操作符,可以用来进行数据运算。

使用方法效果如下图所示:

注:1:%运算的左右操作数,只能是整数!不能为浮点数

3.移位操作符

左移操作符 <<

右移操作符 >>

移位操作数只能为整数,不能移动负数位

计算机存储数据是用补码的方式储存的

3.1 左移操作符

移位规则:左边丢弃,右边补0

如下示例:

原码:人们最熟悉的编码方式,0/1表示正负,数值位为二进制位

反码:除符号位不变,将原码的数值位取反。

补码:反码+1

补充原码和反码互相转化的技巧:符号位不变,从右往左(低位到高位)看,遇到第一个‘1’后,第一个‘1’左边的数值位全部取反。补码转原码同样适用!

3.2 右移操作符

移位规则:分为两种:

  1. 逻辑移位:右边丢弃,左边补0
  2. 算数移位:右边丢弃,左边补符号位(正数补0,负数补1)

如下示例:

可以看出VS2019默认算数右移!

4. 位操作符

|  按位或
  &  按位与
  ^  按位异或(同0异1)

注:操作数必须为整数

如下示例:

5. 赋值操作符(=)

用=表示赋值,==判断是否相等

复合赋值操作符:

  • +=
  • -=
  • *=
  • /=
  • %=
  • >>=
  • <<=
  • &=
  • |=
  • ^=

例如:sum=+i 等价于 sum=sum +i

6.单目运算符

‘ !’为逻辑取反,非0的都为真,0为假

如下示例:

sizeof格式问题:

6.1 sizeof与数组

从这里可以看出(2)(4)传进去的为数组的首地址,并不是整个数组。

7.关系操作符

注:==和=不要用混

8.逻辑操作符

如图代码:&&操作,判断a++先使用后赋值,在判断a为0后,直接可以判断出表达式为假,因此后面的运算都不算了

如图代码:| |操作,只要判断出一边为真,后面的运算也不用算了,a为0,b为3为真,因此d++不再运算!

9.条件操作符

exp1 ? exp2 : exp3

用途:简化代码量

10.逗号表达式

(exp1, exp2, exp3, …expN)

逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。

从图中可以看出,数组的内容为{1,2,4,5},可以看出(3,4)的结果为4.

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

[ ] 下标引用操作符

( ) 函数调用操作符

结构体访问 (. ->)

12.表达式求值

12.1 隐式类型转换

简单理解为,CPU愿意计算 大于等于int 类型的数据,如果数据类型为char或者short时,系统会默认把char或者short转化为int 类型(按照符号位来补充高位)。

如下例子:

例1:

实例1中的a,b要进行整形提升,但是c不需要整形提升a,b整形提升之后,变成了负数,所以表达式 a0xb6,b0xb600 的结果是假,但是c不发生整形提升,则表达式 c==0xb6000000 的结果是真。

例2:

实例2中的,c只要参与表达式运算,就会发生整形提升,表达式 +c ,就会发生提升,所以 sizeof(+c) 是4个字节。表达式 -c 也会发生整形提升,所以 sizeof(-c) 是4个字节,但是 sizeof© ,就是1个字节。

12.2 算术转换

如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行。下面的层次体系称为寻常算术转换。

简单理解就是:不同的类型数据进行计算时,低级的操作数,优先转换为高级的操作数再进行计算。

12.3 操作符属性

  1. 操作符的优先级
  2. 操作符的结合性
  3. 是否控制求值顺序。

最后赋上操作符优先级表格,供大家参考:

以上就是详解操作符的全部内容了,恳请大佬们斧正!💖

目录
相关文章
|
11月前
|
存储 索引
【操作符】
【操作符】
33 0
|
1月前
|
编译器
|
2月前
|
SQL 数据库
IN 操作符
【7月更文挑战第15天】IN 操作符。
31 4
|
3月前
|
编译器 Linux C语言
操作符详解(2)
操作符详解(2)
36 0
|
4月前
|
编译器 索引
操作符详解3
操作符详解3
37 0
|
11月前
|
存储
操作符详解上(非常详细)
操作符详解上(非常详细)
69 1
|
9月前
|
存储 编译器
操作符详解(1)
操作符详解(1)
36 0
|
C语言 索引
详解操作符(中)
详解操作符(中)
|
编译器
详解操作符(上)
详解操作符(上)
|
关系型数据库 MySQL
AND操作符
AND操作符
87 0