操作符(详解)

简介: 操作符(详解)

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. 是否控制求值顺序。

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

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

目录
相关文章
|
编译器 C语言 索引
操作符详解下(非常详细)
操作符详解下(非常详细)
56 0
|
6月前
|
SQL 数据库
IN 操作符
【7月更文挑战第15天】IN 操作符。
49 4
|
7月前
|
编译器 Linux C语言
操作符详解(2)
操作符详解(2)
59 0
|
8月前
|
编译器 C语言 C++
操作符详解2(二)
本文介绍了编程中的操作符转换和表达式解析规则。当操作数类型不同时,会进行寻常算术转换,按照long double、double、float等类型顺序进行向上转换。表达式求值时,虽然操作符有优先级,但不能决定操作数的求值顺序,例如`a*b + c*d + e+f`中乘法先于加法,但具体计算顺序不确定,可能导致不同结果。同样,如`c++ + c--`这样的表达式也是有歧义的,因为++和--的左右结合性不能确定操作数的获取顺序。文章强调,复杂的表达式可能因编译器差异产生不同结果,应避免使用可能导致非唯一计算路径的表达式以减少潜在风险。
60 0
|
8月前
|
存储 C语言
操作符详解2(一)
C语言操作符具有优先级和结合性,决定表达式求值顺序。优先级高的运算符先执行,相同优先级时看结合性,左结合从左到右,右结合从右到左。例如,3+4*5中乘法优先级高于加法,5*6/2中乘法和除法优先级相同,但都是左结合,所以先计算5*6。圆括号具有最高优先级,可改变其他运算符优先级。表达式求值时,整型运算以缺省整型精度进行,小整型值会被提升为int或unsigned int。正数提升时高位补0,负数提升时高位补1,无符号整型提升始终补0。
69 0
|
8月前
|
存储 程序员 C语言
操作符详解1(二)
该内容是一个关于C语言操作符和结构体的教程摘要。首先提到了加法操作符`+`的使用,并给出了一种不使用临时变量交换两个数的方法。接着讨论了如何计算整数的二进制表示中1的个数,通过位操作符实现。然后介绍了逗号表达式和函数调用操作符`()`,以及结构体成员访问操作符`.`和`-&gt;`,用于访问和修改结构体内的成员变量。文章以讲解结构体的声明、初始化和通过指针访问结构体成员为重点,展示了如何直接和间接地操作结构体数据。
61 0
|
8月前
|
编译器 索引
操作符详解3
操作符详解3
52 0
|
编译器 C语言 索引
S5——C操作符详解,你都知道吗? 下
讲解主要内容: 1. 各种操作符的介绍 2. 表达式求值 以下让我们开始正式重新认识和理解操作符吧!
操作符详解(一)
操作符详解(一)
88 0
|
C语言 索引
【C】操作符详解
今天给大家带来一篇关于C语言操作符的详细介绍,在C语言中操作符主要有以下几种:

热门文章

最新文章