前言
本篇文章是对运算符的具体讲解。
一、运算符的概念与分类
概念:
运算符就是一种告诉编译器执行特定的数学或逻辑操作的符号,用来表示针对数据的特定操作,也称之为操作符。在计算机编程中,运算符用于操作数据,执行各种数学和逻辑运算,并产生结果。
分类:
1.根据分类对象的多少可以分为单目运算符(又名一元运算符)、双目操作符(又名二元操作符)、三目操作符(又名三元操作符)。
2.根据运算作用不同又可以分为:算术操作符、关系操作符、逻辑操作符、位运算符、赋值运算符、杂项操作符等。
二、算术运算符
含义:
算术运算符是对数值类型变量进行运算的,属于上述的双目操作符,结合性是从左到右的,算术优先级就是我们所知的 “ * 、/ 、% ”>“ +、 -”。
(实例中的变量x为20,变量y为10)
运算符 | 描述 | 实例 |
+ | 把两个操作数相加 | x+y得到15 |
- | 第一个操作数减去第二个操作数 | x-y得到5 |
* | 把两个操作数相乘 | x*y得到50 |
/ | 把两个操作数相除 | x/y得到2 |
% | 取模,结果为整除后的余数 | x%y得到0 |
++ | 自增运算符,整数值加一 | x++得到11 |
-- | 自减运算符,整数值减一 | x--得到9 |
需要注意的是:
a++(a--) 与 ++a(--a)的区别,前者为先赋值后运算,后者为先运算后赋值。当其作为一个独立的语言使用时,是等价的。但是当它出现在语句中就会有所不同。
下面通过一个实例代码来帮助大家更好的理解:
#include <stdio.h> int main() { int y; int x = 10; y = x++; printf("先赋值后运算:\n"); printf("y 的值是 %d\n", y ); printf("x 的值是 %d\n", x ); x = 10; y = x--; printf("y 的值是 %d\n", y ); printf("x 的值是 %d\n", x ); printf("先运算后赋值:\n"); x = 10; y = ++x; printf("y 的值是 %d\n", y ); printf("x 的值是 %d\n", x ); a = 10; c = --a; printf("y 的值是 %d\n", y ); printf("x 的值是 %d\n", x ); return 0; }
程序运行的结果如下:
三、关系运算符
含义:
关系运算符的值只能是0或1。当运算符的值为真时,结果值都为1;反之,都为0;关系运算符也属于双目运算符,结合性为从左到右,优先级为“ > 、 < 、 >= 、 <= ” > " == 、 != "。
(假设实例中的变量x的值为20,变量y的值为10)
运算符 | 描述 | 实例 |
== | 检查俩个操作数的值是否相等,如果相等则为真 | x==y为假 |
!= | 检查俩个操作数的值是否相等,如果不相等则为真 | x!=y为真 |
> | 检查左操作数是否大于右操作数,如果符合则为真 | x>y为真 |
< | 检查左操作数是否小于右操作数,如果符合则为真 | x<y为假 |
>= | 检查左操作数是否大于等于右操作数,如果符合则为真 | x>=y为真 |
<= | 检查左操作数是否小于等于右操作数,如果符合则为真 | x<=y为假 |
下面通过一个实例代码来帮助大家更好的理解:
#include <stdio.h> int main() { int x = 20; int y = 10; int c ; if( x == y ) { printf("x 等于 y\n" ); } else { printf("x 不等于 y\n" ); } if ( x < y ) { printf("x 小于 y\n" ); } else { printf("x 不小于 y\n" ); } if ( x > y ) { printf("x 大于 y\n" ); } else { printf("x 不大于 y\n" ); } int t; t = x; x = y; y = t; if ( x <= y ) { printf("x 小于或等于 y\n" ); } if ( y >= x ) { printf("y 大于或等于 x\n" ); } return 0; }
程序运行的结果如下:
四、逻辑运算符
含义:
用于连接多个条件的运算符,结果也是为真(1)或假(0),结合性为从右到左。
(假设实例中的变量x的值为0,变量y的值为1)
运算符 | 描述 | 实例 |
&& | 称之为逻辑与运算符,当且仅当俩个操作数都不为零时,条件为真。 | A&&B为假 |
|| | 称之为逻辑或运算符,当俩个操作数存在人一个非零时,条件为真。 | A||B为真 |
! | 称之为逻辑非运算符,用来逆转操作数的逻辑状态。将真变为假,假变为真。 | !(A&&B)为真 |
下面通过一个实例代码来帮助大家更好的理解:
#include <stdio.h> int main() { int x = 20; int y = 10; if ( x && y ) { printf("条件1为真\n" ); } if ( x || y ) { printf("条件2为真\n" ); } x = 0; y = 10; if ( x && y ) { printf("条件3为真\n" ); } else { printf("条件3为假\n" ); } if ( !(x && y) ) { printf("条件4为真\n" ); } return 0; }
程序运行的结果如下:
五、赋值运算符
含义:
赋值运算符就是将某个值赋给某个指定的变量,结合性为从右到左。
运算符 | 描述 | 实例 |
= | 简单的赋值运算符,把右边的操作数赋给左边操作数 | 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 |
<<= | 左移且赋值运算符 | C<<=2等同于C=C<<2 |
>>= | 右移且赋值运算符 | C>>=2等同于C=C>>2 |
&= | 按位与且赋值运算符 | C&=2等同于C=C&2 |
^= | 按位异或且赋值运算符 | C^=2等同于C=C^2 |
|= | 按位或且赋值运算符 | C|=2等同于C=C|2 |
下面通过一个实例代码来帮助大家更好的理解:
#include <stdio.h> int main() { int a = 21; int c ; c = a; printf(" = 的运算符实例,c 的值 = %d\n", c ); c += a; printf("+= 的运算符实例,c 的值 = %d\n", c ); c -= a; printf("-= 的运算符实例,c 的值 = %d\n", c ); c *= a; printf("*= 的运算符实例,c 的值 = %d\n", c ); c /= a; printf("/= 的运算符实例,c 的值 = %d\n", c ); c <<= 2; printf("<<= 的运算符实例,c 的值 = %d\n", c ); c >>= 2; printf(">>= 的运算符实例,c 的值 = %d\n", c ); c &= 2; printf("&= 的运算符实例,c 的值 = %d\n", c ); c ^= 2; printf("^= 的运算符实例,c 的值 = %d\n", c ); c |= 2; printf("|= 的运算符实例,c 的值 = %d\n", c ); return 0; }
程序运行的结果如下:
六、运算符的优先级
含义:
运算符的优先级往往会影响一个表达式的运算的结果,比如最常见的就是乘除运算的优先级大于加减运算。
类型 | 运算符 | 结合性 |
乘除 | * / % | 从左到右 |
加减 | + - | 从左到右 |
后缀 | () [] ++ -- | 从左到右 |
一元 | + - ! ~ ++ --(type)* & sizeof | 从右到左 |
移位 | << >> | 从左到右 |
关系 | <<= >>= | 从左到右 |
相等与不等 | == != | 从左到右 |
位与AND | & | 从左到右 |
位异或XOR | ^ | 从左到右 |
位或OR | | | 从左到右 |
逻辑与AND | && | 从左到右 |
逻辑或OR | || | 从左到右 |
条件 | ?: | 从右到左 |
赋值 | = += -= *= /= %= >>= <<= &= ^= |= | 从右到左 |
逗号 | , | 从左到右 |
总结
本篇文章详细地讲了C语言的运算符,希望能够帮到大家!
以后还会给大家展现更多关于C语言的其他重要的基础知识,感谢大家支持懒大王!