【C语言】运算符大全(附运算符优先级表)

        在C语言中,运算符是用来执行各种数学和逻辑操作的符号。它们可以用于算术运算、关系比较、逻辑判断等方面。本文将介绍C语言中常见的运算符及其用法。结尾附有运算符优先级表

目录

1. 算术运算符

2. 关系运算符

3.逻辑运算符

4.位运算符

5.(复合)赋值运算符

6. 其他运算符

三、总结


1. 算术运算符

算术运算符用于执行基本的数学运算,如加、减、乘、除和取余。常见的算术运算符包括:

  • 加法运算符(+):执行两个操作数的相加操作。
  • 减法运算符(-):执行两个操作数的相减操作。
  • 乘法运算符(*):执行两个操作数的相乘操作。
  • 除法运算符(/):执行两个操作数的相除操作。
  • 取余运算符(%):计算两个操作数的余数。

以下是算术运算符的一些示例代码:

#include <stdio.h>

int main() {
    int a = 10;
    int b = 3;
    int c = 0;
    
    c = a + b; // 加法运算
    printf("a + b = %d\n", c);
    
    c = a - b; // 减法运算
    printf("a - b = %d\n", c);
    
    c = a * b; // 乘法运算
    printf("a * b = %d\n", c);
    
    c = a / b; // 除法运算
    printf("a / b = %d\n", c);
    
    c = a % b; // 取余运算
    printf("a %% b = %d\n", c);
    
    return 0;
}

注意:

 除号运算符:/

分母不能为0;分母为0,会报语法错误,也可能程序会直接崩溃!!!

相除结果只能保留整数部分;例如结果为3.3,实际保留结果为3

#include<stdio.h>
int main()
{
	int a=10;
	int b=3;
	int c=0;
	
	c=a/b;//除号运算,只能保留结果得整数部分;被除数b不能为0 
	printf("a/b=%d\n",c);
	
	return 0;
} 

2. 关系运算符

        关系运算符用于比较两个值之间的关系,返回的结果是真(非零)或假(零)。常见的关系运算符包括:

  • 大于运算符(>):判断左操作数是否大于右操作数。
  • 大于等于运算符(>=):判断左操作数是否大于或等于右操作数。
  • 小于运算符(<):判断左操作数是否小于右操作数。
  • 小于等于运算符(<=):判断左操作数是否小于或等于右操作数。
  • 等于运算符(==):判断两个操作数是否相等。
  • 不等于运算符(!=):判断两个操作数是否不相等。

以下是关系运算符的示例代码:

#include <stdio.h>

int main() {
    int a = 10;
    int b = 5;
    
    if (a > b) {
        printf("a > b\n");
    }
    
    if (a >= b) {
        printf("a >= b\n");
    }
    
    if (a < b) {
        printf("a < b\n");
    }
    
    if (a <= b) {
        printf("a <= b\n");
    }
    
    if (a == b) {
        printf("a == b\n");
    }
    
    if (a != b) {
        printf("a != b\n");
    }
    
    return 0;
}

3.逻辑运算符

        逻辑运算符用于进行逻辑判断,结果为真(非零)或假(零)。常见的逻辑运算符包括:

  • 与运算符(&&):当两个操作数都为真时,结果为真。
  • 或运算符(||):当两个操作数中至少有一个为真时,结果为真。
  • 非运算符(!):对操作数取反,如果操作数为真,则结果为假;如果操作数为假,则结果为真。

注意1:

&&:(表达式1)&&(表达式2)

表达式1和表达式2都为真,则为逻辑真

表达式1和表达式2有一个为假,或者全部为假,则为逻辑假

注意:当表达式1为假时,表达式2不再执行判断(表达式2语句不执行)。

#include<stdio.h>
int main()
{
	int a=10;
	int b=3;
	
	if((a<b)&&(b=a+b))//(a<b)为假,b=a+b不再执行 
	{
		printf("hello zaizai!\n");
	}
	printf("a=%d,b=%d\n",a,b);
	
	if((a>b)&&(b=a+b))//(a>b)为真,b=a+b执行 
	{
		printf("hello zaizai\n");
	}
	printf("a=%d,b=%d\n",a,b);
	return 0;
} 

注意2:

||:(表达式1)||(表达式2)

表达式1和表达式2有一个为真,则为逻辑真

表达式1和表达式2全为假,则为逻辑假

注意:当表达式1为真时,表达式2不再执行判断(表达式2语句不执行)。

#include<stdio.h>
int main()
{
	int a=10;
	int b=3;
	
	if((a<b)||(b=a+b))//(a<b)为假,b=a+b执行 
	{
		printf("hello zaizai!\n");
	}
	printf("a=%d,b=%d\n",a,b);
	
	if((a)||(b=a+b))//(a)为真,b=a+b不再执行 
	{
		printf("hello zaizai\n");
	}
	printf("a=%d,b=%d\n",a,b);
	return 0;
} 

4.位运算符

位运算符用于对二进制位进行操作。常见的位运算符包括:

  • 按位与运算符(&):执行按位与操作。
  • 按位或运算符(|):执行按位或操作。
  • 按位异或运算符(^):执行按位异或操作。
  • 按位取反运算符(~):执行按位取反操作。
  • 左移运算符(<<):将一个数的二进制位向左移动指定的位数。
  • 右移运算符(>>):将一个数的二进制位向右移动指定的位数。

        位运算符通常用于对二进制数据进行处理,对于普通的数学运算并不常用。(感兴趣的话可以阅读我的另一篇关于位运算符大全的博客)。

5.(复合)赋值运算符

=、+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=

赋值运算符:=

  • 单个等号(=)在c语言中是赋值运算;
  • 算术运算符复合赋值:+=、-=、*=、/=、%=
  • 位运算符复合赋值:&=、|=、^=、<<=、>>=
#include <stdio.h>

int main() {
    int a = 10;
    int b = 5;
    
    a += b; // 等价于 a = a + b;
    printf("a = %d\n", a);
    
    a -= b; // 等价于 a = a - b;
    printf("a = %d\n", a);
    
    a *= b; // 等价于 a = a * b;
    printf("a = %d\n", a);
    
    a /= b; // 等价于 a = a / b;
    printf("a = %d\n", a);
    
    a %= b; // 等价于 a = a % b;
    printf("a = %d\n", a);
    
    return 0;
}

6. 其他运算符

除了上述常见的运算符外,C语言还有一些特殊的运算符:

  • sizeof运算符:用于获取变量或数据类型的字节大小。
  • 三目/条件运算符:用于根据条件选择不同的表达式进行赋值。
  • 逗号运算符:用于在一条语句中依次执行多个表达式,并返回最后一个表达式的值。
  • 下标运算符([]):用于访问数组中的元素。
  • 取地址运算符(&):用于获取变量的内存地址。
  • 地址引用运算符(*):用于通过指针访问所指向的变量。
  • 结构体/共用体成员访问运算符(.):用于访问结构体或共用体中的成员。
  • 结构体/共用体指针成员访问运算符(->):用于通过指针访问结构体或共用体中的成员。
  • 小括号运算符(()):用于控制运算的优先级和改变运算的顺序。
  • 强制类型转换运算符:用于将一个数据类型强制转换为另一个数据类型。

sizeof运算符:

#include <stdio.h>

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int size = sizeof(arr) / sizeof(arr[0]);
    printf("数组的大小为:%d\n", size);
    
    return 0;
}

三目/条件运算符: 

#include <stdio.h>

int main() {
    int a = 10;
    int b = 5;
    int max = (a > b) ? a : b;
    printf("较大的数是:%d\n", max);
    
    return 0;
}

 逗号运算符:

#include <stdio.h>

int main() {
    int a = 5, b = 10, c = 15;
    int max = (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);
    printf("最大的数是:%d\n", max);
    
    return 0;
}

下标运算符:

#include <stdio.h>

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int index = 2;
    int value = arr[index];
    printf("数组中下标为 %d 的元素是:%d\n", index, value);
    
    return 0;
}

 取地址运算符(&)和地址引用运算符(*):

#include <stdio.h>

int main() {
    int a = 10;
    int *ptr = &a;
    
    printf("变量 a 的值为:%d\n", a);
    printf("变量 a 的地址为:%p\n", &a);
    printf("指针 ptr 的值为:%p\n", ptr);
    printf("指针 ptr 指向的值为:%d\n", *ptr);
    
    return 0;
}

结构体/共用体成员访问运算符(.)和结构体/共用体指针成员访问运算符(->): 

#include <stdio.h>

struct Point {
    int x;
    int y;
};

int main() {
    struct Point p1 = {3, 4};
    struct Point *ptr = &p1;
    
    printf("p1 的 x 坐标为:%d\n", p1.x);
    printf("p1 的 y 坐标为:%d\n", p1.y);
    
    printf("指针 ptr 指向的结构体的 x 坐标为:%d\n", ptr->x);
    printf("指针 ptr 指向的结构体的 y 坐标为:%d\n", ptr->y);
    
    return 0;
}

 强制类型转换运算符:

#include <stdio.h>

int main() {
    int a = 10;
    double b = 3.14;
    int result = (int)b / a;
    
    printf("强制类型转换的结果为:%d\n", result);
    
    return 0;
}

三、总结

运算符虽然不少,而且还有优先级之分,但是多练习熟悉就好了,实践出真知!

附录:运算符优先级表 

优先级

运算符名称或含义使用形式结合方向说明

       1

   []

数组下标数组名[长度]

  从左往右

()小括号(表达式)或
函数名(形参表)
  .取成员结构体名.成员
  ->指针结构体指针->成员

       2

  -负号运算符-表达式

  从右往左

单目运算符
()强制类型转换(数据类型)表达式
  ++自增运算符++变量或变量++单目运算符
  --自减运算符--变量或变量--单目运算符
  *取内容*指针变量单目运算符
  &取地址&变量名单目运算符
  !逻辑非!表达式单目运算符
  ~按位取反~整型表达式单目运算符
  sizeof求长度sizeof(表达式)单目运算符

       3 

 /表达式 / 表达式

  从左往右

双目运算符
 *表达式 * 表达式双目运算符
  %取余表达式 / 表达式双目运算符

       4

 +表达式+表达式

  从左往右

双目运算符
  -表达式-表达式双目运算符

       5

<<左移变量<<表达式

  从左往右

双目运算符
>>右移变量<<表达式双目运算符

       6

>大于表达式>表达式

  从左往右

双目运算符
>=大于或等于表达式>=表达式双目运算符
<小于表达式<表达式双目运算符
<=小于或等于表达式<=表达式双目运算符

       7

 ==等于表达式==表达式

  从左往右

双目运算符
 !=不等于表达式!=表达式双目运算符
       8  &按位与表达式&表达式  从左往右双目运算符
       9  ^按位异或表达式^表达式  从左往右 双目运算符
      10  |按位或表达式|表达式  从左往右双目运算符
      11&&逻辑与表达式&&表达式  从左往右双目运算符
      12||逻辑或表达式||表达式  从左往右双目运算符

      13

?:条件运算符表达式1? 表达式2: 表达式3

  从右往左

三目运算符

      14

=赋值运算符变量=表达式

  从右往左

双目运算符

/=除后再赋值变量/=表达式
*=乘后再赋值变量*=表达式
%=取余后再赋值变量%=表达式
+=加后再赋值变量+=表达式
-=减后再赋值变量-=表达式
<<=左移再赋值变量<<=表达式
>>=右移再赋值变量>>=表达式
&=按位与再赋值变量&=表达式
^=按位异或再赋值变量^=表达式
|=按位或再赋值变量|=表达式
      15,逗号表达式表达式,表达式,…  从左往右

  • 17
    点赞
  • 113
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SecureCode

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值