运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 语言内置了丰富的运算符。
运算符
1) 算术运算符
假设变量 A 的值为 10,变量 B 的值为 20,则:
运算符 | 描述 | 实例 |
---|---|---|
+ | 把两个操作数相加 | A+B 得到 30 |
- | 从第一个操作数中减去第二个操作数 | A - B 得到 -10 |
* | 把两个操作数相乘 | A * B 得到 200 |
/ | 分子除以分母 | A / B 得到 2 |
% | 取模运算符,整除后的余数 | A % B 得到 0 |
++ | 自增运算符,整数值增加 1 | A++ 得到 11 |
- - | 自减运算符,整数值减少 1 | A- - 得到 9 |
注意:/ 与% 的除数不能为0 ,但如果不使用这个数,只会抛出异常,程序仍能运行;使用这个数后将出现错误:浮点数例外(核心已转储)
自变运算符
其中自变运算符可以使变量的值+1或-1,根据其位置分为前自变和后自变。他们都能使变量的值改变,但是区别在于前自变是立即生效,而后自变要在下一行语句生效。
建议:不要在一行内多次使用自变运算符
int i = 0;
printf("%d\n",i++);
printf("%d\n",++i);
上面的语句输出的结果分别是:0,2
因为第一个printf语句执行是后自增,执行完printf 输出 i 原来的值 0 后再自增。
进入第二个printf语句前,i 的值已经变成了1,而第二个printf语句是前自增,先自增后执行printf语句,所以输出 i = 2;
2)关系运算符
假设变量 A 的值为 10,变量 B 的值为 20,则:
运算符 | 描述 | 实例 |
---|---|---|
== | 检查两个操作数的值是否相等,如果相等则条件为真。 | (A == B) 为假 |
!= | 检查两个操作数的值是否相等,如果不相等则条件为真。 | (A != B) 为真 |
> | 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 | (A > B) 为假 |
< | 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 | (A < B) 为真 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 | (A >= B) 为假 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 | (A <= B) 为真 |
关系运算符的比较结果为0或1,比较结果能继续运算
例:
int num = -5
if ( 1<num<10 )
if 语句永远为真,运算结果与数学不一样
3)逻辑运算符
假设变量 A 的值为 1,变量 B 的值为 0,则:
运算符 | 描述 | 实例 |
---|---|---|
&& | 称为逻辑与运算符。如果两个操作数都非零,则条件为真 | (A && B) 为假 |
|| | 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真 | (A |
! | 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假 | !(A && B) 为真 |
注意:&& || 具有短路特性:当左边的运算已经能确定整个表达式的结果时,右边的所有运算都不计算
短路特性:
int i=0;
i==0 && i++;
printf("%d",i);
i==0 && i++;
printf("%d",i);
上面的语句输出的结果分别是:1,1
逻辑与运算符有假即假,因此当&&的第一个条件为真时,无法判断其表达式的结果,所以会执行后面的语句 i++。printf语句输出的结果为 1 ;
此时 i 的值为 1,不满足 i == 0 的条件,可以判断整个表达式的结果为假,&&后面的 i ++ 不执行。 printf语句输出的结果还是 1 ;
4)赋值运算符
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符,把右边操作数的值赋给左边操作数 | C = A + B 将把 A + B 的值赋给 C |
+= | 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 | C += A 相当于 C = C + A |
- = | 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 | C -= A 相当于 C = C - A |
*= | 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 | C *= A 相当于 C = C * A |
/= | 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 | C /= A 相当于 C = C / A |
%= | 求模且赋值运算符,求两个操作数的模赋值给左边操作数 | C %= A 相当于 C = C % A |
5)杂项运算符
运算符 | 描述 | 实例 |
---|---|---|
sizeof() | 返回变量的大小 | int a ; sizeof(a) 将返回 4 |
& | 返回变量的地址 | &a; 将给出变量的实际地址 |
? : | 条件表达式,如果条件为真 ? 则值为 X : 否则值为 Y | 1>0?1:0 结果为1 |
运算优先级
结语
希望这篇文章对你有所帮助