运算符的具体讲解

昨天刷C语言技能树的时候,刷到运算符这里时,看到了一篇文章感觉到不错,所以本小白今天就把所学的分享一下。✊✊✊

🍎1.概念:

运算符就是一种告诉编译器执行特定的数学或逻辑操作的符号,用来表示针对数据的特定操作,也称之为操作符。

🍌2.分类:

1.根据分类对象的多少可以分为单目运算符(又名一元运算符)、双目操作符(又名二元操作符)、三目操作符(又名三元操作符)。

2.根据运算作用不同又可以分为:算术操作符、关系操作符、逻辑操作符、位运算符、赋值运算符、杂项操作符等。

🍓2.1算术操作符

解释:

算术操作符是对数值类型变量进行运算的,属于上述的双目操作符,结合性是从左到右的,算术优先级就是我们所知的 “ * 、/ 、% ”>“ +、 -”

(实例中的变量A为20,变量B为10)
运算符描述实例
+把两个操作数相加A+B得到30
-第一个操作数减去第二个操作数A-B得到10
*把两个操作数相乘A*B得到200
/把两个操作数相除A/B得到2
%取模,结果为整除后的余数A%B得到0
++自增运算符,整数值加一A++得到20
--自减运算符,整数值减一A--得到19

为了更好的理解,代码如下:

#include <stdio.h>
 
int main()
{
   int A = 20;
   int B = 10;
   int C ;
 
   C = A + B;
   printf("C 的值是 %d\n", C );
   C = A - B;
   printf("C 的值是 %d\n", C );
   C = A * B;
   printf("C 的值是 %d\n", C );
   C = A / B;
   printf("C 的值是 %d\n", C );
   C = A % B;
   printf("的值是 %d\n", C );
   C = A++;  // 赋值后再加 1 ,C 为 20,A为 21;
   printf("C 的值是 %d\n", C );
   C = A--;  // 赋值后再减 1 ,C 为 21 ,A 为 20;
   printf("C 的值是 %d\n", C ); 
 
   return 0;
}

运算的结果

如下: 

 

 

🍒拓展:

a++(a--) 与 ++a(--a)的区别,前者为赋值运算,后者为运算赋值。当其作为一个独立的语言使用时,是等价的。但是当它出现在语句中就会有所不同。下面通过一个代码来帮助更好的理解。

#include <stdio.h>
 
int main()
{
   int c;
   int a = 10;
   c = a++; 
   printf("先赋值后运算:\n");
   printf("c 的值是 %d\n", c );
   printf("a 的值是 %d\n", a );
   a = 10;
   c = a--; 
   printf("c 的值是 %d\n", c );
   printf("a 的值是 %d\n", a );
 
   printf("先运算后赋值:\n");
   a = 10;
   c = ++a; 
   printf("c 的值是 %d\n", c );
   printf("a 的值是 %d\n", a );
   a = 10;
   c = --a; 
   printf("c 的值是 %d\n", c );
   printf("a 的值是 %d\n", a );
 
    return 0;
}

运行的结果如下:

🍉 2.2关系操作符

解释:

关系操作符的值只能是0或1。当运算符的值为真时,结果值都为1;反之,都为0;关系运算符也属于双目运算符,结合性为从左到右,优先级为“ > 、 < 、 >= 、 <=  ”  >  " == 、 !=  "

(假设实例中的变量A的值为20,变量B的值为10)
运算符描述实例
==检查俩个操作数的值是否相等,如果相等则为真A==B为假
!=检查俩个操作数的值是否相等,如果不相等则为真A!=B为真
检查左操作数是否大于右操作数,如果符合则为真A>B为真
检查左操作数是否小于右操作数,如果符合则为真A<B为假
>=检查左操作数是否大于等于右操作数,如果符合则为真A>=B为真
<=检查左操作数是否小于等于右操作数,如果符合则为真A<=B为假

为了更好的理解,代码如下:

#include <stdio.h>
 
int main()
{
   int a = 20;
   int b = 10;
   int c ;
 
   if( a == b )
   {
      printf("a 等于 b\n" );
   }
   else
   {
      printf("a 不等于 b\n" );
   }
   if ( a < b )
   {
      printf("a 小于 b\n" );
   }
   else
   {
      printf("a 不小于 b\n" );
   }
   if ( a > b )
   {
      printf("a 大于 b\n" );
   }
   else
   {
      printf("a 不大于 b\n" );
   }
    int t;
   t = a;
   a = b;
   b = t;
//改变a 与 b的值,之前说过a值与b值相互转化的方法,感兴趣的可以去之前的博客瞅瞅;
   if ( a <= b )
   {
      printf("a 小于或等于 b\n" );
   }
   if ( b >= a )
   {
      printf("b 大于或等于 a\n" );
   }

   return 0;
}

运行出的结果如下:

🍊2.3逻辑操作符 

解释:

用于连接多个条件的操作符,结果也是为真(1)或假(0),结合性为从右到左。

(假设实例中的变量A的值为0,变量B的值为1)
运算符描述实例
&&称之为逻辑与运算符,当且仅当俩个操作数都不为零时,条件为真。A&&B为假
||称之为逻辑或运算符,当俩个操作数存在人一个非零时,条件为真。A||B为真
称之为逻辑非运算符,用来逆转操作数的逻辑状态。将真变为假,假变为真。!(A&&B)为真

相同的,代码如下哈:

#include <stdio.h>
 
int 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

 为了更好的理解,给出以下代码:

#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  = 200;
   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;
}

运行的结果如下:

 🥥2.5运算符的优先级

解释:

运算符的优先级往往会影响一个表达式的运算的结果,比如最常见的就是乘除运算的优先级大于加减运算。

下表将运算符的优先级从高到低列出各个运算符,具有较高优先级的运算符出现在表格的上面,具有较低优先级的运算符出现在表格的下面。在表达式中,相比较下具有较高优先级的运算符会优先被计算。

类型运算符结合性
后缀() [] ++ --从左到右
一元+ - !~ ++ -- (type)* & sizeof从右到左
乘除* / %从左到右
加减+ -从左到右
移位<< >>从左到右
关系<<= >>= 从左到右
相等== !=从左到右
位与AND&从左到右
位异或XOR^从左到右
位或OR|从左到右
逻辑与AND&&从左到右
逻辑或OR||从左到右
条件?:从右到左
赋值= += -= *= /= %=  >>= <<= &= ^= |=从右到左
逗号,从左到右

结语: 

本文的内容就到这里,如果本文有错误,欢迎大家进行指正,接下来我们还是一起努力呀!!!

 

 

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值