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

C语言---运算符

文章目录

  • 1. 算术运算符
  • 2. 关系运算符
  • 3. 逻辑运算符
  • 4. 位运算符
  • 5. 赋值运算符
  • 6. 条件运算符(三目运算符)
  • 7. 逗号运算符
  • 8. sizeof 运算符
  • 9. 指针运算符
  • 10. 特殊运算符
  • 运算符优先级和结合性

运算符是告诉编译器执行特定数学或逻辑操作的符号,是构成表达式的基础。

1. 算术运算符

用于执行基本的数学运算。

运算符描述示例 (a=10, b=3)结果
+加法a + b13
-减法a - b7
*乘法a * b30
/除法a / b3
%取模(求余数)a % b1
++自增a++ 或 ++aa 变为 11
自减a-- 或 --aa 变为 9
注意:
/ 除法:当两个整数相除时,结果也是整数,小数部分被截断(不是四舍五入)。例如 10 / 3 结果是 3,10.0 / 3 结果是 3.333…。
% 取模:要求两个操作数必须为整数。
++ 和 --:
前缀 (++a/–a):先自增/自减,然后返回新值。
后缀 (a++/a–):先返回原值,然后自增/自减。
int a = 10, b;
b = ++a; // a 先变成 11,然后 b 被赋值为 11
// 现在 a=11, b=11a = 10;
b = a++; // b 先被赋值为 10,然后 a 变成 11
// 现在 a=11, b=10

2. 关系运算符

用于比较两个值,返回 1 (真) 或 0 (假)。

运算符描述示例 (a=10, b=20)结果
==等于a == b0
!=不等于a != b1
>大于a > b0
<小于a < b1
>=大于等于a >= b0
<=小于等于a <= b1

3. 逻辑运算符

用于连接多个条件,返回 1 (真) 或 0 (假)。

运算符描述示例解释
&&逻辑与(a > 5) && (b < 5)两个条件都为真,结果才为真
||逻辑或(a > 5) || (b < 5)两个条件有一个为真,结果就为真
!逻辑非!(a > 5)逆转操作数的逻辑状态
注意:逻辑运算符支持“短路求值”
A && B:如果 A 为假,则不会计算 B。A || B:如果 A 为真,则不会计算 B。

4. 位运算符

直接在数据的二进制位上操作,只能用于 char 和 int 等整型。

运算符描述示例 (a=60, b=13) a=0011 1100, b=0000 1101
&按位与a & b = 0000 1100 (12)
|按位或a | b = 0011 1101 (61)
^按位异或a ^ b = 0011 0001 (49)
~按位取反~a = 1100 0011 (-61,取决于位数和表示法)
<<左移a << 2 = 1111 0000 (240)
>>右移a >> 2 = 0000 1111 (15)
注意:

左移 <<:高位丢弃,低位补 0。相当于乘以 2^n。

右移 >>:

对无符号数,低位丢弃,高位补 0。
对有符号数,低位丢弃,高位补符号位(算术右移)。
相当于除以 2^n(向下取整)。

5. 赋值运算符

用于给变量赋值。

运算符示例等价于
=a = ba = b
+=a += ba = a + b
-=a -= ba = a - b
*=a *= ba = a * b
/=a /= ba = a / b
%=a %= ba = a % b
<<=a <<= 2a = a << 2
>>=a >>= 2a = a >> 2
&=a &= ba = a & b
^=a ^= ba = a ^ b

6. 条件运算符(三目运算符)

C 语言中唯一需要三个操作数的运算符。

语法: 条件 ? 表达式1 : 表达式2

执行过程: 如果条件为真,则整个表达式取 表达式1 的值,否则取 表达式2 的值。

int a = 10, b = 20, max;
max = (a > b) ? a : b; // 因为 a> b 为假,所以 max 被赋值为 b (20)

7. 逗号运算符

用于将多个表达式连接在一起。整个逗号表达式的值是最后一个表达式的值,计算顺序从左到右。

int a, b, c;
c = (a = 5, b = a + 3, a + b); 
// 执行过程:a被赋值为5 -> b被赋值为8 -> c被赋值为a+b(5+8)=13

8. sizeof 运算符

用于计算变量、类型或数据结构在内存中所占的字节数。它是一个编译时运算符,返回值类型是 size_t。

int arr[10];
printf("Size of int: %zu\n", sizeof(int)); // 通常是 4
printf("Size of variable a: %zu\n", sizeof(a));
printf("Size of entire array: %zu\n", sizeof(arr)); // 4 * 10 = 40

9. 指针运算符

运算符描述示例
&取地址运算符,返回变量的内存地址&a
*解引用运算符,返回指针所指地址的值*ptr

10. 特殊运算符

运算符描述示例
[]数组下标arr[5]
()函数调用printf(…)
.结构体成员访问struct.member
->通过指针访问结构体成员ptr->member
(type)强制类型转换(float) a

运算符优先级和结合性

当多个运算符出现在同一个表达式中时,优先级决定了谁先计算,结合性决定了相同优先级运算符的计算顺序(从左到右还是从右到左)。
(), [], ->, . (从左到右)
大致规律(从高到低):

单目运算符:!, ~, ++, --, +(正), -(负), *(解引用), &(取址), sizeof, (type) (从右到左) 
算术运算符:*, /, % -> +, - (从左到右)
移位运算符:<<, >> (从左到右)
关系运算符:<, <=, >, >= -> ==, != (从左到右)    
位运算符:& -> ^ -> | (从左到右)  
逻辑运算符:&& -> || (从左到右)    
条件运算符:?: (从右到左)  
赋值运算符:=, +=, -= 等 (从右到左)    
逗号运算符:, (从左到右)图片来自菜鸟教程:https://www.runoob.com/cprogramming/c-operators.html

运算符优先级

注意:使用括号 () 来明确指定计算顺序!这是最安全、最清晰的做法。


文章转载自:

http://950dg3KK.mfsxd.cn
http://dXjWdKgU.mfsxd.cn
http://KpNkCuG1.mfsxd.cn
http://KwORJaPy.mfsxd.cn
http://hvAfIQtP.mfsxd.cn
http://BwQ7Ksne.mfsxd.cn
http://y39i3pvI.mfsxd.cn
http://aRDvxS5p.mfsxd.cn
http://7VhA6AQN.mfsxd.cn
http://l2O5Hy3F.mfsxd.cn
http://MJlZUqTX.mfsxd.cn
http://3n9FE9Sj.mfsxd.cn
http://xZCSqxl6.mfsxd.cn
http://oiZja8ll.mfsxd.cn
http://HUa7mwOX.mfsxd.cn
http://RykgGdA7.mfsxd.cn
http://zfXFyVrx.mfsxd.cn
http://QxB155TN.mfsxd.cn
http://n6PRy4Wh.mfsxd.cn
http://Kwy7XV8k.mfsxd.cn
http://ZG6JCOq1.mfsxd.cn
http://EDRkdtS0.mfsxd.cn
http://XVFDepZj.mfsxd.cn
http://Wec8uGPV.mfsxd.cn
http://oZYolLKR.mfsxd.cn
http://gsv6dNeE.mfsxd.cn
http://pMvvo5HK.mfsxd.cn
http://CFFinsbE.mfsxd.cn
http://Wk0XtwuQ.mfsxd.cn
http://BFL0O9mu.mfsxd.cn
http://www.dtcms.com/a/382212.html

相关文章:

  • 什么是包装类
  • 59.[前端开发-Vue3]Day01-Vue初体验-MVVM-模板语法-常用指令
  • 1.13 Memory Profiler Package - Unity Objects(unity对象页签)
  • Nginx 请求到达nginx,但是到不了业务服?报错408
  • 若依分库分表,在admin模块可查询子库,在API模块无法查询
  • 幸运盒项目—测试报告
  • 如何告诉AI你的写作任务?
  • Windows11设置Jar包打开方式
  • 尝试MuJS
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘modin’问题
  • SceneSplat
  • Docker笔记上篇
  • 基于 Spring Boot+Vue 的高校竞赛管理平台
  • 闪电科创-边缘计算AI辅导
  • AOP快速入门
  • AI智能社会学TESC模型让你找到技术、经济、社会、文化游戏规则与未来秩序,以此看懂技术经济学数字空间社会学网络空间社会学互联网社会学
  • C# Entity Framework Core 的 CRUD 操作与关联查询实战示例
  • java后端工程师进修ing(研一版‖day44)
  • 部署 LVS-DR 群集
  • 事务学习总结
  • IP协议相关特性
  • 贪心算法应用:高频订单流平衡问题详解
  • Win系统下配置PCL库第四步之LASlib文件配置(超详细)
  • 软考-局域网基础考点总结
  • Asio C++ Library是用来做什么的
  • 深度学习在智能车辆故障诊断中的应用
  • DeepFace 全面使用教程
  • ISP之DHCPv6-PD(前缀代理)为用户下发前缀
  • LINUX913 shell:set ip [lindex $argv 0],\r,send_user,spawn ssh root@ip “cat “
  • GEO 优化专家孟庆涛以 AI 技术建体系,赋能多行业智能化转型