四、学习笔记,C语言—运算符

运算符

运算符类型 说明 运算符类型 说明
算术运算符 + − * / % 指针运算符 * &
关系运算符 > < == >= <= ! = 求字节数运算符 sizeof
逻辑运算符 ! && || 强制类型转换运算符 (类型)
位运算符 << >> ^ | & ~ 分量运算符 . →
赋值运算符 = 及其扩展赋值运算符 下标运算符 []
条件运算符 ? : 其他 如函数调用运算符()
逗号运算符 ,

算数运算符

运算符 描述 结合性
+ 单目正 从右至左
单目负 从右至左
* 从左至右
/ 除和整除 从左至右
% 取模(取余) 从左至右
+ 双目加 从左至右
双目减 从左至右

关系运算符

运算符 功能说明 示例
> 大于 a > b或a > 5
>= 大于等于 a >= b或a >= 5
< 小于 a < b或a < 5
<= 小于等于 a <= b或a <= 5
== 等于 a == b或a == 5
!= 不等于 a != b或a != 5

逻辑运算符

  • 与运算(&&):

双目运算符,只有两个运算量都是1时,运算结果才为1,左结合型

左运算量 右运算量 &&运算结果
0 0 0
0 1 0
1 0 0
1 1 1
  • 或运算(||):

双目运算符,只要有一个运算量为1,结果就为1,左结合型

左运算量 右运算量 运算结果
0 0 0
0 1 1
1 0 1
1 1 1
  • 非运算(!)

单目运算符,当运算量进行非运算,结果会取反,右结合性

运算量 !运算结果
0 1
1 0

位运算符

运算符 功能说明 示例
~ 位逻辑反 ~a
& 位逻辑与 a&b
| 位逻辑或 a|b
^ 位逻辑异或 a^b
>> 右移位 a>>1
<< 左移位 b<<4
  • 非运算(~)

单目运算符,当运算量进行非运算,结果会取反

运算量 ~运算结果
0 1
1 0
  • 与运算符(&)
  • 双目操作符,当两个位进行相与时,只有两者都为“1”时结果才为“1”。
左运算量 右运算量 &运算结果
0 0 0
0 1 0
1 0 0
1 1 1
  • 或运算符(|)
  • 双目操作符,当两个位进行相或时,两者中只要有一方为“1”,结果就为“1”
左运算量 右运算量 运算结果
0 0 0
0 1 1
1 0 1
1 1 1
  • 异或运算符(|)
  • 双目操作符,当两个位进行异或时只要两者相同,结果就为“0”,否则结果为“1”
左运算量 右运算量 ^运算结果
0 0 0
0 1 1
1 0 1
1 1 0
  • 位移位运算

<运算量> <运算符> <表达式>其中:

  • <运算量> 必须为整型结果数值;
  • <运算符>为左移位(<<)或 右移位(>>)运算符;
  • <表达式> 也必须为整型结果数值。

赋值运算符

运算符 功能说明 示例
+= 加赋值复合运算符 a += b 等价于a = a + b
-= 减赋值复合运算符 a -= b 等价于a = a - b
*= 乘法赋值复合运算符 a *= b 等价于a = a * b
/= 除法赋值复合运算符 a /= b等价于a = a / b
%= 求余赋值复合运算符 a %= b 等价于a = a % b
&= 位与赋值复合运算符 a &= b 等价于a = & b
|= 位或赋值复合运算符 a |= b等价于a = a | b
^= 位异或赋值复合运算符 a ^= b等价于a = a ^ b
>>= 位右移赋值复合运算符 a >>= b 等价于a = a >> b
<<= 位左移赋值复合运算符 a <<= b 等价于a = a << b

特殊运算符

条件运算符“?:”

  • 是三目运算符,其运算的一般形式是:
  • <表达式1>?<表达式2>:<表达式3>
<表达式1>?<表达式2>:<表达式3>
关系如下:
if(表达式1)
    表达式2
else
    表达式3
#include <stdio.h>

int main(int argc, char *argv[])
{
        int x = 70, y = 10;

        //y = x++ > 70 ? x + y : 5;
        y = ++x > 70 ? x + y : 5;

        printf("x=%d y = %d\n", x, y);
        
        return 0;
}

逗号运算符“,”

float x = 10.5, y = 18, z = 0;
z = (x += 5, y = x + 0.2)
z赋值为15.7, x赋值为15.6, y赋值为15.7

z = (x = y = 5, x += 1)
z赋值为6, x赋值为6, y赋值为5

z = (x = 5, y = 6, x + y)
z赋值为11, x赋值为5, y赋值为6

z = (z = 8,x = 5, y = 3)
z赋值为3, x赋值为5, y赋值为3

sizeof操作符

  • 单目运算符,它的运算对象是变量或数据类型,运算结果为一个整数
  • sizeof(<类型或变量名>)

运算符优先级

运算符的优先级和结合性

优 先 级 运 算 符 "含义" 运算对象个数 结 合 方 向
1 () 圆括号 自左向右
[] 下标运算符
−> 指向结构体成员运算符
. 结构体成员运算符
2 ! 逻辑非运算 1(单目) 自右向左
按位取反运算
++ 自增运算符
− − 自减运算符
负号运算符
(类型) 类型转换运算符
* 指针运算符
& 地址运算符
sizeof 长度运算符
3 * 乘法运算符 2(双目) 自左向右
/ 除法运算符
% 求余运算符
4 + 加法运算符 2(双目) 自左向右
减法运算符
5 << 左移运算符 2(双目) 自左向右
>> 右移运算符
6 < 关系运算符 2(双目) 自左向右
<=
>
>=
7 = = 等于运算符 2(双目) 自左向右
!= 不等于运算符
8 & 按位与运算符 2(双目) 自左向右
9 ^ 按位异或运算符 2(双目) 自左向右
10 | 按位或运算符 2(双目) 自左向右
11 && 逻辑与运算符 2(双目) 自左向右
12 || 逻辑或运算符 2(双目) 自左向右
13 ? : 条件运算符 3(三目) 自右向左
14 = 赋值运算符 2(双目) 自右向左
+=
−=
*=
/=
%=
>>=
<<=
&=
^=
|=
15 逗号运算符 自左向右

猜你喜欢

转载自blog.csdn.net/Mr__Shen/article/details/84752723