当前位置: 首页 > news >正文

7. C语言 运算符详解

本章目录:

    • 前言
    • C语言运算符的分类
      • 1. 算术运算符
      • 2. 关系运算符
      • 3. 逻辑运算符
      • 4. 位运算符
      • 5. 赋值运算符
      • 6. 杂项运算符
    • 运算符优先级


前言

在C语言中,运算符是程序中执行各种操作的核心工具,涉及算术运算、逻辑判断、位操作等多个方面。掌握C语言中的各种运算符对于写出高效、简洁的代码至关重要。本文将对C语言的运算符进行详细解析,包括其分类、常见使用方法及优化技巧。


C语言运算符的分类

C语言中的运算符可以按功能划分为以下几类:

  1. 算术运算符:用于进行数学运算。
  2. 关系运算符:用于比较两个操作数。
  3. 逻辑运算符:用于逻辑判断。
  4. 位运算符:用于处理二进制数据。
  5. 赋值运算符:用于给变量赋值。
  6. 杂项运算符:包括sizeof()、指针操作符、三元运算符等。

1. 算术运算符

算术运算符用于进行基本的数学计算,C语言提供了加、减、乘、除等多种运算。

运算符描述示例
+加法A + B
-减法A - B
*乘法A * B
/除法A / B
%取余A % B
++自增A++
--自减A--

示例:

#include <stdio.h>int main() {int a = 21;int b = 10;int c;c = a + b;printf("Line 1: c = %d\n", c);c = a - b;printf("Line 2: c = %d\n", c);c = a * b;printf("Line 3: c = %d\n", c);c = a / b;printf("Line 4: c = %d\n", c);c = a % b;printf("Line 5: c = %d\n", c);return 0;
}

输出:

Line 1: c = 31
Line 2: c = 11
Line 3: c = 210
Line 4: c = 2
Line 5: c = 1

2. 关系运算符

关系运算符用于比较两个操作数的大小或相等性,通常用于控制结构(如if语句)中。

运算符描述示例
==等于(A == B)
!=不等于(A != B)
>大于(A > B)
<小于(A < B)
>=大于或等于(A >= B)
<=小于或等于(A <= B)

示例:

#include <stdio.h>int main() {int a = 21, b = 10;if (a == b) {printf("a equals b\n");} else {printf("a does not equal b\n");}return 0;
}

3. 逻辑运算符

逻辑运算符主要用于布尔值运算,在条件表达式中判断多个条件是否成立。

运算符描述示例
&&逻辑与(A && B)
||逻辑或(A || B)
!逻辑非!(A && B)

示例:

#include <stdio.h>int main() {int a = 5, b = 10;if (a && b) {printf("Both a and b are non-zero\n");}if (a || b) {printf("At least one of a or b is non-zero\n");}return 0;
}

4. 位运算符

位运算符用于操作数字的二进制位,这在一些低级编程、嵌入式开发中非常有用。

运算符描述示例
&按位与A & B
|按位或A | B
^按位异或A ^ B
~按位取反~A
<<左移A << 2
>>右移A >> 2

交换两个数的值:

使用异或运算符^可以不借助临时变量交换两个数的值:

#include <stdio.h>int main() {unsigned int a = 60;  // 0011 1100unsigned int b = 13;  // 0000 1101a = a ^ b;  // a = 0011 0001b = a ^ b;  // b = 0011 1100a = a ^ b;  // a = 0000 1101printf("a = %d, b = %d\n", a, b);  // 输出交换后的结果return 0;
}

输出:

a = 13, b = 60

5. 赋值运算符

赋值运算符用于将右侧的值赋给左侧的变量。C语言还提供了复合赋值运算符,如+=-=等,简化了某些常见操作。

运算符描述示例
=赋值C = A + B
+=加法赋值C += A
-=减法赋值C -= A
*=乘法赋值C *= A
/=除法赋值C /= A
%=求余赋值C %= A

示例:

#include <stdio.h>int main() {int a = 21, c;c = a;printf("c = %d\n", c);c += a;printf("c += a: %d\n", c);c *= a;printf("c *= a: %d\n", c);return 0;
}

6. 杂项运算符

C语言中还有一些独特的运算符,像sizeof&*和三元运算符。

运算符描述示例
sizeof获取变量的大小sizeof(a)
&获取变量地址&a
*解引用指针*ptr
?:三元运算符condition ? x : y

示例:

#include <stdio.h>int main() {int a = 10;int *ptr = &a;// sizeof 运算符printf("Size of a: %lu\n", sizeof(a));// 指针操作符printf("Address of a: %p\n", (void*)&a);printf("Value at ptr: %d\n", *ptr);// 三元运算符int b = (a == 10) ? 20 : 30;printf("b = %d\n", b);return 0;
}

运算符优先级

运算符优先级决定了表达式中各个操作数计算的顺序。较高优先级的运算符会先执行。

类别运算符结合性
后缀() [] -> . ++ --从左到右
一元+ - ! ~ ++ -- (type) * & sizeof从右到左
乘除* / %从左到右
加减+ -从左到右
移位<< >>从左到右
关系< <= > >=从左到右
相等== !=从左
http://www.lryc.cn/news/516133.html

相关文章:

  • Java四大常用JSON解析性能对比:Hutool、Fastjson2、Gson与Jackson测试
  • Qt 5.14.2 学习记录 —— 일 新项目
  • uni-app:实现普通选择器,时间选择器,日期选择器,多列选择器
  • Unity3D仿星露谷物语开发17之空库存栏UI
  • QT------模型/视图
  • Git - 记录一次由于少输入了一个命令导致的更改丢失
  • nodeJS下npm和yarn的关系和区别详解
  • 党员学习交流平台
  • HTML5 文件上传(File Upload)详解
  • 1.2.1-2部分数据结构的说明02_链表
  • vue elementUI Plus实现拖拽流程图,不引入插件,纯手写实现。
  • linux上使用cmake编译的方法
  • 如何实现el-select多选下拉框中嵌套复选框并加校验不为空功能呢?
  • 源码理解 UE4中的 FCookStatsManager::FAutoRegisterCallback RegisterCookStats
  • Android 根据内存大小显示MTP模式连接PC时的名称
  • 不只是mini-react第一节:实现最简单mini-react
  • 前端路由layout布局处理以及菜单交互(三)
  • 小结:DNS,HTTP,SMTP,IMAP,FTP,Telnet,TCP,ARP,ICMP
  • 【C++】P2550 [AHOI2001] 彩票摇奖
  • 并发服务器框架——zinx
  • Unity 中计算射线和平面相交距离的原理
  • 浅谈棋牌游戏开发流程七:反外挂与安全体系——守护游戏公平与玩家体验
  • 《无力逃脱》V1.0.15.920(59069)官方中文版
  • 六种主流服务器的选择与使用
  • TiDB 升级至高版本提示'mysql.tidb_runaway_watch' doesn't exist 问题处理
  • GRU-PFG:利用图神经网络从股票因子中提取股票间相关性
  • 数字化供应链创新解决方案在零售行业的应用研究——以开源AI智能名片S2B2C商城小程序为例
  • 安卓Activity执行finish后onNewIntent也执行了
  • 数据结构.期末复习.学习笔记(c语言)
  • Kafaka安装与启动教程