这边我们对简单的操作符不过多讲解,今天只介绍一部分在C语言分支和循环中比较少见的,还有一些后续会介绍。
1.操作符的分类
• 算术操作符: + 、- 、* 、/ 、%
• 移位操作符: << 、>>
• 位操作符: & | ^
• 赋值操作符:= 、+= 、 -= 、 *= 、 /= 、%= 、<<=、>>= 、&= 、|= 、^=
• 单⽬操作符: !、++、--、&、*、+、-、~ 、sizeof、(类型)
• 关系操作符: > 、>= 、< 、<=、 == 、 !=
• 逻辑操作符: && 、||
• 条件操作符: ? :
• 逗号表达式: ,
• 下标引⽤: []
• 函数调⽤: ()
• 结构成员访问: . 、->
2.原码、反码、补码
整数的二进制标识方法有三种,即原码、反码和补码。(下面介绍许多操作符都是基于二进制变 现形式上进行的)
有符号整数的三种表⽰⽅法均有符号位和数值位两部分,2进制序列中,最⾼位的1位是被当做 符号 位,剩余的都是数值位。(比如:100000000000000000000000000000011 为-3)
符号位用0表示 “正” ,用1表示 “负” 。
正数的原码、反码、补码都想同,负数的三种表现方式都不同。
原码:直接将数值按照正负数的形式翻译成二进制得到的就是原码。
反码:将原码除了符号位其余的依次按位取反。
补码:将反码加一。
补码到反码的转换也是同样的操作:取反,加一 (负数的话符号位不变,数值位按位取反)
对于整形来说:在内存中存放的是补码。
3.移位操作符
<< 左移操作符
>> 右移操作符
注:移位操作符的操作数只能是整数。
3.1 左移操作符
移位规则:左边抛弃,右边补0

左移一位有乘二的效果
3.2 右移操作符
移位规则:右移分两种运算(根据编译器不同)
1.逻辑右移:左边用0填充,右边丢弃(比较粗暴)
2.算术右移:左边由该值的符号位填充,右边丢弃(更加合理)


算术右移一位有除二的效果
警告:对于移位操作符,不要移动负数位,这是未定义的。
4.位操作符
1.按位与:&
2.按位或: |
3.按位异或:^
4.按位取反:~

5.赋值操作符
• 赋值操作符:= 、+= 、 -= 、 *= 、 /= 、%= 、<<=、>>= 、&= 、|= 、^=
赋值操作符都比较类似,写法和使用方法基本一样
+= 操作符就是 n = n + 2,其余赋值操作符以此类推。


6.单目操作符
单目操作符只介绍一个
sizeof:用来计算变量所占的内存,单位是字节,一个整形占四个字节。

7.逻辑操作符
&&:并且的意思,左右两个表达式,一方为假则为假,两方都为真则为真。(表达式 && 表达 式)
||:或者的意思,左右两个表达式,一方为真2则为真。(表达式 || 表达式)
8.条件操作符
9.逗号表达式
用法:从左到右依次执行,最后一个表达式的结果为整个表达式结果。(不一定每个表达式都会 影响整个表达式最终结果)

10.下标引用操作符

11.函数调用操作符

12.结构体成员引用操作符

有时候我们只能间接得到一个结构体指针

使用方式:结构体指针加成员名
12. 操作符的属性:优先级、结合性
C语言的操作符有2个重要的属性:优先级、结合性,这两个属性决定了表达式求值的计算顺序。
12.1 优先级
优先级指的是,如果⼀个表达式包含多个运算符,哪个运算符应该优先执行。各种运算符的优先级是 不⼀样的。
1 3 + 4 * 5;
上面示例中,表达式 3 + 4 * 5 里面既有加法运算符( + ),又有乘法运算符( * )。由于乘法的优先级高于加法,所以会先计算 4 * 5 ,而不是先计算 3 + 4 。
12.2 结合性
如果两个运算符优先级相同,优先级没办法确定先计算哪个了,这时候就看结合性了,则根据运算符是左结合,还是右结合,决定执行顺序。大部分运算符是左结合(从左到右执行),少数运算符是右结合(从右到左执行),比如赋值运算符( = )。
1 5 * 6 / 2;
上面示例中, * 和 / 的优先级相同,它们都是左结合运算符,所以从左到右执行,先计算 5 * 6 , 再计算 / 2 。 运算符的优先级顺序很多,下面是部分运算符的优先级顺序(按照优先级从高到低排列),建议⼤概 记住这些操作符的优先级就行,其他操作符在使用的时候上网上搜索就可以了。
• 圆括号( () )
• 自增运算符( ++ ),自减运算符( -- )
• 单目运算符( + 和 - )
• 乘法( * ),除法( / )
• 加法( + ),减法( - )
• 关系运算符( < 、 > 等)
• 赋值运算符( = )
由于圆括号的优先级最高,可以使用它改变其他运算符的优先级
以上就是操作符的部分内容,制作不易请三连,谢谢支持!!

https://c.biancheng.net/view/1809.html
&spm=1001.2101.3001.5002&articleId=141154983&d=1&t=3&u=f364885d5bc94602ba98a326210fb0b5)
1262

被折叠的 条评论
为什么被折叠?



