昨天刷C语言技能树的时候,刷到运算符这里时,看到了一篇文章感觉到不错,所以本小白今天就把所学的分享一下。✊✊✊
1.概念:运算符就是一种告诉编译器执行特定的数学或逻辑操作的符号,用来表示针对数据的特定操作,也称之为操作符。
2.分类:1.根据分类对象的多少可以分为单目运算符(又名一元运算符)、双目操作符(又名二元操作符)、三目操作符(又名三元操作符)。
2.根据运算作用不同又可以分为:算术操作符、关系操作符、逻辑操作符、位运算符、赋值运算符、杂项操作符等。
2.1算术操作符 解释:算术操作符是对数值类型变量进行运算的,属于上述的双目操作符,结合性是从左到右的,算术优先级就是我们所知的 “ * 、/ 、% ”>“ +、 -”。
| 运算符 | 描述 | 实例 |
| + | 把两个操作数相加 | A+B得到30 |
| - | 第一个操作数减去第二个操作数 | A-B得到10 |
| * | 把两个操作数相乘 | A*B得到200 |
| / | 把两个操作数相除 | A/B得到2 |
| % | 取模,结果为整除后的余数 | A%B得到0 |
| ++ | 自增运算符,整数值加一 | A++得到20 |
| -- | 自减运算符,整数值减一 | A--得到19 |
为了更好的理解,代码如下:
#includeint main() { int A = 20; int B = 10; int C ; C = A + B; printf("C 的值是 %dn", C ); C = A - B; printf("C 的值是 %dn", C ); C = A * B; printf("C 的值是 %dn", C ); C = A / B; printf("C 的值是 %dn", C ); C = A % B; printf("的值是 %dn", C ); C = A++; // 赋值后再加 1 ,C 为 20,A为 21; printf("C 的值是 %dn", C ); C = A--; // 赋值后再减 1 ,C 为 21 ,A 为 20; printf("C 的值是 %dn", C ); return 0; }
运算的结果
如下:
拓展:
a++(a--) 与 ++a(--a)的区别,前者为先赋值后运算,后者为先运算后赋值。当其作为一个独立的语言使用时,是等价的。但是当它出现在语句中就会有所不同。下面通过一个代码来帮助更好的理解。
#includeint main() { int c; int a = 10; c = a++; printf("先赋值后运算:n"); printf("c 的值是 %dn", c ); printf("a 的值是 %dn", a ); a = 10; c = a--; printf("c 的值是 %dn", c ); printf("a 的值是 %dn", a ); printf("先运算后赋值:n"); a = 10; c = ++a; printf("c 的值是 %dn", c ); printf("a 的值是 %dn", a ); a = 10; c = --a; printf("c 的值是 %dn", c ); printf("a 的值是 %dn", a ); return 0; }
运行的结果如下:
2.2关系操作符 解释:关系操作符的值只能是0或1。当运算符的值为真时,结果值都为1;反之,都为0;关系运算符也属于双目运算符,结合性为从左到右,优先级为“ > 、 < 、 >= 、 <= ” > " == 、 != "。
| 运算符 | 描述 | 实例 |
| == | 检查俩个操作数的值是否相等,如果相等则为真 | A==B为假 |
| != | 检查俩个操作数的值是否相等,如果不相等则为真 | A!=B为真 |
| > | 检查左操作数是否大于右操作数,如果符合则为真 | A>B为真 |
| < | 检查左操作数是否小于右操作数,如果符合则为真 | A |
| >= | 检查左操作数是否大于等于右操作数,如果符合则为真 | A>=B为真 |
| <= | 检查左操作数是否小于等于右操作数,如果符合则为真 | A<=B为假 |
为了更好的理解,代码如下:
#includeint main() { int a = 20; int b = 10; int c ; if( a == b ) { printf("a 等于 bn" ); } else { printf("a 不等于 bn" ); } if ( a < b ) { printf("a 小于 bn" ); } else { printf("a 不小于 bn" ); } if ( a > b ) { printf("a 大于 bn" ); } else { printf("a 不大于 bn" ); } int t; t = a; a = b; b = t; //改变a 与 b的值,之前说过a值与b值相互转化的方法,感兴趣的可以去之前的博客瞅瞅; if ( a <= b ) { printf("a 小于或等于 bn" ); } if ( b >= a ) { printf("b 大于或等于 an" ); } return 0; }
运行出的结果如下:
2.3逻辑操作符 解释:用于连接多个条件的操作符,结果也是为真(1)或假(0),结合性为从右到左。
| 运算符 | 描述 | 实例 |
| && | 称之为逻辑与运算符,当且仅当俩个操作数都不为零时,条件为真。 | A&&B为假 |
| || | 称之为逻辑或运算符,当俩个操作数存在人一个非零时,条件为真。 | A||B为真 |
| ! | 称之为逻辑非运算符,用来逆转操作数的逻辑状态。将真变为假,假变为真。 | !(A&&B)为真 |
相同的,代码如下哈:
#includeint main() { int a = 20; int b = 10; int c ; if ( a && b ) { printf("条件1为真n" ); } if ( a || b ) { printf("条件2为真n" ); } a = 0; b = 10; if ( a && b ) { printf("条件3为真n" ); } else { printf("条件3为假n" ); } if ( !(a && b) ) { printf("条件4为真n" ); } return 0; }
运行的结果如下:
2.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 |
| <<= | 左移且赋值运算符 | 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 |
为了更好的理解,给出以下代码:
#includeint main() { int a = 21; int c ; c = a; printf(" = 的运算符实例,c 的值 = %dn", c ); c += a; printf("+= 的运算符实例,c 的值 = %dn", c ); c -= a; printf("-= 的运算符实例,c 的值 = %dn", c ); c *= a; printf("*= 的运算符实例,c 的值 = %dn", c ); c /= a; printf("/= 的运算符实例,c 的值 = %dn", c ); c = 200; c %= a; printf("%= 的运算符实例,c 的值 = %dn", c ); c <<= 2; printf("<<= 的运算符实例,c 的值 = %dn", c ); c >>= 2; printf(">>= 的运算符实例,c 的值 = %dn", c ); c &= 2; printf("&= 的运算符实例,c 的值 = %dn", c ); c ^= 2; printf("^= 的运算符实例,c 的值 = %dn", c ); c |= 2; printf("|= 的运算符实例,c 的值 = %dn", c ); return 0; }
运行的结果如下:
便2.5运算符的优先级 解释:运算符的优先级往往会影响一个表达式的运算的结果,比如最常见的就是乘除运算的优先级大于加减运算。
下表将运算符的优先级从高到低列出各个运算符,具有较高优先级的运算符出现在表格的上面,具有较低优先级的运算符出现在表格的下面。在表达式中,相比较下具有较高优先级的运算符会优先被计算。
| 类型 | 运算符 | 结合性 |
| 后缀 | () [] ++ -- | 从左到右 |
| 一元 | + - !~ ++ -- (type)* & sizeof | 从右到左 |
| 乘除 | * / % | 从左到右 |
| 加减 | + - | 从左到右 |
| 移位 | << >> | 从左到右 |
| 关系 | <<= >>= | 从左到右 |
| 相等 | == != | 从左到右 |
| 位与AND | & | 从左到右 |
| 位异或XOR | ^ | 从左到右 |
| 位或OR | | | 从左到右 |
| 逻辑与AND | && | 从左到右 |
| 逻辑或OR | || | 从左到右 |
| 条件 | ?: | 从右到左 |
| 赋值 | = += -= *= /= %= >>= <<= &= ^= |= | 从右到左 |
| 逗号 | , | 从左到右 |
本文的内容就到这里,如果本文有错误,欢迎大家进行指正,接下来我们还是一起努力呀!!!



