跟着肯哥(不是我)学运算符与表达式
运算符
在C语言中,运算符是一种用来执行特定操作的符号或关键字。它们用于对变量、常量和表达进行计算、逻辑判断和位操作等。
定义一般都当耳旁风了
运算符分类
算术运算符
+-*/%
加减乘除取模,这没啥好说的
逻辑运算符:
- 与:
&&
- 或:
||
- 非:
!
这个遵循短路原则,算到前面的时候运算符结果已经确定了,就不会再判断后面的条件。
比如:与运算第一个条件为假,就没必要看第二个条件了
关系运算符
- 等于
==
- 不等于
!=
- 大于
>
- 小于
<
- 大于等于
>=
- 小于等于
<=
与小学数学规则相同,也没什么好说的
位运算符
- 按位与
&
- 按位或
|
- 按位异或
^
- 左移
<<
- 右移
>>
对同一个变量进行两次异或可以得到原来的值,可以用于简单的对称加密
赋值运算
- 赋值
=
- 复合赋值
+=
、-=
、*=
、/=
、%=
、&=
、|=
、^=
、<<=
、>>=
也没啥好说的
其他运算符
- 返回变量或数据类型的大小
sizeof
- 取地址
&
- 指针
*
- 条件表达式
?:
- 逗号运算符
,
这些也是运算符,这件事,我之前是没想过的。
运算符的优先级顺序
这我直接复制粘贴了,猜你也记不住
以下是常见运算符按照优先级从高到低的顺序:
- 圆括号:
()
括号可以用于明确指定运算的优先级,可以改变默认的优先级规则。 - 单目运算符:
++
、--
(前缀和后缀递增递减)、+
(正号)、-
(负号)、!
(逻辑非)、~
(位求反)。 - 算术运算符:
*
(乘法)、/
(除法)、%
(取模)。 - 加减运算符:
+
(加法)、-
(减法)。 - 移位运算符:
<<
(左移)和>>
(右移)。 - 关系运算符:
>
(大于)、<
(小于)、>=
(大于等于)、<=
(小于等于)。 - 相等性运算符:
==
(等于)、!=
(不等于)。 - 位运算符:
&
(按位与)、^
(按位异或)、|
(按位或)。 - 逻辑运算符:
&&
(逻辑与)和||
(逻辑或)。 - 条件运算符:
?:
(三元运算符)。 - 赋值运算符:
=
(赋值)、+=
、-=
、*=
、/=
、%=
、&=
、^=
、|=
、<<=
、>>=
。 - 逗号运算符:逗号用于分隔表达式,并按照从左到右的顺序进行求值。
表达式
表达式是由运算符、操作数和函数调用组成的代码片段,用于执行特定的计算或操作。表达式可以是简单的变量、常量,也可以是由运算符连接起来的复杂的组合。
定义就当耳旁风略过了,下面也是从讲义搬运过来的:
- 算术表达式(Arithmetic Expressions):由算术运算符(如
+
、-
、*
、/
、%
)和操作数(变量或常量)组成的表达式。算术表达式用于执行基本的数学运算,如加减乘除等。 - 逻辑表达式(Logical Expressions):由逻辑运算符(如
&&
、||
、!
)和操作数(变量或常量)组成的表达式。逻辑表达式用于执行逻辑判断,返回布尔值(true
或false
)。 - 关系表达式(Relational Expressions):由关系运算符(如
==
、!=
、>
、<
、>=
、<=
)和操作数(变量或常量)组成的表达式。关系表达式用于比较操作数之间的关系,返回布尔值。 - 位运算表达式(Bitwise Expressions):由位运算符(如
&
、|
、^
、<<
、>>
)和操作数(变量或常量)组成的表达式。位运算表达式用于对操作数的内部位进行操作,通常用于位级的操作和优化。 - 条件表达式(Conditional Expressions):也称为三元表达式(Ternary Expression),由条件运算符(
? :
)和三个操作数组成的表达式。条件表达式根据一个条件的结果,选择返回两个操作数中的一个。 - 赋值表达式(Assignment Expressions):由赋值运算符(
=
、+=
、-=
、*=
、/=
、%=
等)和操作数组成的表达式。赋值表达式用于将一个值或表达式的结果赋给变量。 - 逗号表达式(Comma Expressions):它是一种特殊的表达式,它由逗号操作符(
,
)分隔的多个子表达式组成。逗号表达式的求值过程从左到右依次求值每个子表达式,并将最后一个子表达式的结果作为整个逗号表达式的结果。
int result =func1(),func2(),func3();
上述代码中,逗号操作符使得三个函数调用依次执行,且整个语句的结果是最后一个函数的返回值。
这里我想补充的是,链式调用。表达式中含有自定义数据类型的时候,应该注意表达式的返回值类型。
比如在C++中,返回的可能是个流对象,而且是全局唯一的对象。
欣赏一段有意思的代码
新手写这样的代码:乱七八糟
大佬写这样的代码:优雅