C语言学习(六)——运算符

C语言中的运算符是用于告诉编译器执行特定操作的符号,包括算术运算符、逻辑运算符、位运算等。运算符是编程中不可或缺的一部分,掌握其用法对于编写高效、清晰的代码至关重要。

1.算术运算符

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

运算符 描述
+ 加法运算符,把两个操作数相加
- 减法运算符,把两个操作数相加
* 乘法运算符,把两个操作数相乘
/ 除法运算符,用于两个操作数的相除
% 取模运算符,返回两个操作数相除的余数
++ 自增运算符,整数值增加 1
-- 自减运算符,整数值减少 1

示例:

cpp 复制代码
#include <stdio.h>

int main()
{
	int a = 17, b = 4;
	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("取余运算符下c的值为:%d\n", c);
	c++;
	printf("自增运算符下c的值为:%d\n",c);
	c--;
	printf("自减运算符下c的值为:%d\n",c);
}

结果:

cpp 复制代码
加法运算符下c的值为:21
减法运算符下c的值为:13
乘法运算符下c的值为:68
除法运算符下c的值为:4
取余运算符下c的值为:1
自增运算符下c的值为:2
自减运算符下c的值为:1

注意:a++与++a的区别

cpp 复制代码
#include <stdio.h>

int main()
{
	int a = 17, b = 4;
	int c;
	c = a++;     //后缀形式,先使用a的值,a再自增
	printf("1.c的值为:%d\n",c);
	printf("此时a的值为:%d\n", a);
	c = ++a;     //前缀形式,a先自增,再使用a的值
	printf("2.c的值为:%d\n",c);
	printf("此时a的值为:%d\n", a);
}

结果:

cpp 复制代码
1.c的值为:17
此时a的值为:18
2.c的值为:19
此时a的值为:19

2.关系运算符

关系运算符用于比较两个操作数的大小关系,返回一个布尔值(真或假)。常见的关系运算符有:

运算符 描述
== 等于,检查两个操作数的值是否相等,如果相等则条件为真
!= 不等于,检查两个操作数的值是否相等,如果不相等则条件为真
> 大于,检查左操作数的值是否大于右操作数的值,如果是则条件为真
< 小于,检查左操作数的值是否小于右操作数的值,如果是则条件为真
>= 大于等于,检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真
<= 小于等于,检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真

示例:

cpp 复制代码
#include <stdio.h>
#include <stdbool.h>

int main()
{
	int a = 17, b = 4;
	bool is_equal = (a == b);
	bool is_not_equal = (a != b);
	bool is_greater = (a > b);
	bool is_less = (a < b);
	bool is_greater_equal = (a >= b);
	bool is_less_equal = (a <= b);
	printf("a == b: %d\n", is_equal);
	printf("a != b: %d\n", is_not_equal);
	printf("a > b: %d\n", is_greater);	
	printf("a < b: %d\n", is_less);
	printf("a >= b: %d\n", is_greater_equal);
	printf("a <= b: %d\n", is_less_equal);
}

结果:

cpp 复制代码
a == b: 0
a != b: 1
a > b: 1
a < b: 0
a >= b: 1
a <= b: 0

3.逻辑运算符

逻辑运算符用于组合多个条件,通常用于控制流程。

运算符 描述
&& 逻辑与运算符。如果两个都为真时返回为真
|| 逻辑或运算符。至少一个条件为真时返回为真
! 逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假

示例:

cpp 复制代码
#include <stdio.h>
#include <stdbool.h>

int main()
{
	int age = 25;
	bool isAdult = (age >= 18 && age<=60); 
	bool isTeenager = (age >= 13 && age <18);
	bool isSenior = (age > 60);
	bool isChild = (age < 13);
	bool isNotAdult = !isAdult;
	printf("Age: %d\n", age);
	printf("Is Adult: %d\n", isAdult);
	printf("Is Teenager: %d\n", isTeenager);
	printf("Is Senior: %d\n", isSenior);
	printf("Is Child: %d\n", isChild);
	printf("Is Not Adult: %d\n", isNotAdult);
}

结果:

cpp 复制代码
Age: 25
Is Adult: 1
Is Teenager: 0
Is Senior: 0
Is Child: 0
Is Not Adult: 0

4.位运算符

位运算符直接对操作数的二进制进行操作,适用于底层编程。

运算符 描述
& 按位与,两个操作数的对应位都为1时结果为1
| 按位或,两个操作数的对应位至少有一个为1时结果为1
^ 按位异或,两个操作数的对应位不同时结果为1,相同为0
~ 按位取反,反转操作数的所有位
<< 左移,将操作数的所有位向左移动指定位数
<= 右移,将操作数的所有位向右移动指定位数

示例:

cpp 复制代码
#include <stdio.h>
int main()
{
	int a = 5, b = 3;  //a=0101,b=0011
	int and= a & b;    //and=0001(1)
	int or = a | b;    //or = 0111(7)
	int xor = a ^ b;   //xor=0110(6)
	int not_a = ~a;    //not_a=1010(-6) 存在计算机中以补码形式存储,最高位为符号位,1表示负数,0表示正数,所以~5的原码为1,0110,结果是-6
	int left_shift = a << 1;//left_shift=1010(10)
	int right_shift = a >> 1;//right_shift=0010(2)
	printf("and=%d\n,or=%d\n,xor=%d\n,not_a=%d,left_shift=%d\n,right_shift=%d\n", and, or , xor, not_a, left_shift, right_shift);
}

结果:

cpp 复制代码
and=1
or=7
xor=6
not_a=-6left_shift=10
right_shift=2

5.赋值运算符

赋值运算符用于变量赋值。常见的 赋值运算符有:

运算符 描述 实例
= 简单的赋值运算符,把右边操作数的值赋给左边操作数 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 << 1
>>= 右移且赋值运算符,将左操作数右移指定位数后赋给左操作数 C >>= 2 等同于 C = C >> 1
&= 按位与且赋值运算符,将左操作数与右操作数按位与后赋给左操作数 C &=A 等同于 C = C & A
^= 按位异或且赋值运算符,将左操作数与右操作数按位异或后赋给左操作数 C ^= A 等同于 C = C ^A
|= 按位或且赋值运算符,将左操作数与右操作数按位或后赋给左操作数 C |= A等同于 C = C | A

示例:

cpp 复制代码
#include <stdio.h>
int main()
{
	int a = 5;  //a=0101
	int c;
	printf("c=a:%d\n", c = a);
	printf("c+=2:%d\n",c+=2);
	printf("c-=2:%d\n", c -= 2);
	printf("c*=2:%d\n", c *= 2);
	printf("c/=2:%d\n", c /= 2);
	printf("c%%=2:%d\n", c %= 2);
	printf("c<<=2:%d\n", c <<= 2);
	printf("c&=2:%d\n", c &= 2);
	return 0;
}

结果:

cpp 复制代码
c=a:5
c+=2:7
c-=2:5
c*=2:10
c/=2:5
c%=2:1
c<<=2:4
c&=2:0

6.其他运算符

?::条件运算符(三元运算符),根据条件选择两个表达式之一执行。

cpp 复制代码
int max = (a > b) ? a : b;

sizeof:返回变量或数据类型的大小(以字节为单位)

cpp 复制代码
int size = sizeof(int);

&:取地址运算符,返回变量的内存地址

cpp 复制代码
int *ptr=&a;

*:指针运算符,用于访问指针指向的值。

cpp 复制代码
int value = *ptr;

++:自增运算符,将变量的值增加1。

cpp 复制代码
a++; // 后置自增
++a; // 前置自增

--:自减运算符,将变量的值减少1。

cpp 复制代码
a--; // 后置自减
--a; // 前置自减

7.运算符优先级

运算符的优先级决定了表达式中运算符的执行顺序。以下是一些常见运算符的优先级(从高到低):

(1)()(括号)、[](数组下标)、.(成员访问)、->(指针成员访问)

(2)!~++--+(正号)、-(负号)、*(指针)、&(取地址)、sizeof

(3)*/%

(4)+-

(5)<<>>

(6)<<=>>=

(7)==!=

(8)&

(9)^

(10)|

(11)&&

(12)||

(13)?:

(14)=+=-=*=/=%=<<=>>=&=^=|=

(15),(逗号运算符)

简记:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符

相关推荐
网小鱼的学习笔记1 小时前
leetcode328:奇偶链表
数据结构·链表
czy87874751 小时前
AI学习文章
人工智能·学习
LYS_06182 小时前
C++学习(8)(文件输入输出,类和对象(1))
开发语言·c++·学习
载数而行5202 小时前
算法系列4之插入排序
数据结构·c++·算法·排序算法
会员果汁2 小时前
二分搜索-C
c语言·算法
dengzhenyue2 小时前
MFC 学习笔记
笔记·学习·mfc
智者知已应修善业2 小时前
【查找指定字符串首位置与数量不区分大小写完整匹配】2025-5-3
c语言·c++·经验分享·笔记·算法
你怎么知道我是队长2 小时前
前端学习---HTML---标签属性
前端·学习·html
yoyo君~2 小时前
从内存管理到并发架构:C++ 核心内功修炼指南
开发语言·c++·学习·无人机