03:运算符

news/2025/10/11 15:04:08/文章来源:https://www.cnblogs.com/janio/p/19134978

> 一篇搞定C语言所有运算符:算术、关系、逻辑、位、赋值、三目、sizeof、优先级表全收录,附短路代码实验,写表达式不再懵!


一、算术运算符(整型&浮点通用)

运算符 功能 示例 备注
+ 加/单目正 a + b+a 单目很少写
- 减/单目负 a - b-a 常用 -a 取相反数
* a * b 双目
/ a / b 整数相除舍去小数
% 取模 a % b 两操作数必须整型
++ 自增 a++++a 前缀先加再用,后缀先用再加
-- 自减 a----a 同上

注意:

  • 减号也是负号,比如 -a 是取变量 a 的相反数
  • 取模运算要求左右两边操作数必须是整型数据
  • 自加和自减运算不仅可以对整型操作,也可以对浮点数、指针操作
  • 前缀自加自减运算:先进行自加自减,再参与表达式运算
  • 后缀自加自减运算:先参与表达式运算,再进行自加自减

① 整数除法陷阱

int a = 5, b = 2;
printf("%d\n", a / b);   // 输出 2,不是 2.5

② 自增实验

int a = 100;
int b = 200;
int c = ++a; // a先自加1,变成101;然后再赋值给c,因此c等于101
int d = b++; // b先赋值给d,因此d等于200;然后b自加1,变成201float f = 3.14;
f++;          // 浮点数也可以自增,f变成4.14int arr[5] = {1,2,3,4,5};
int *p = arr;
p++;          // 指针自增,指向下一个元素

二、关系运算符(结果 0 或 1)

运算符 功能 示例 数学含义
> 大于 a > b ⩾ 不成立
>= 大于等于 a >= b ⩾ 成立
< 小于 a < b < 成立
<= 小于等于 a <= b ≤ 成立
== 相等 a == b ≠ 请用 !=
!= 不相等 a != b

关系表达式值:真=1假=0

注意:

  • 关系运算符用于判断运算符两边的表达式是否满足给定的大小条件
  • 由关系运算符组成的表达式称为关系表达式,其值为布尔型(非零则真)。
  • 判断是否相等是双等号==,而不是一个等号(赋值)。

三、逻辑运算符(短路特性)

运算符 功能 示例 短路规则
! 逻辑非 !a 单目,真假翻转
&& 逻辑与 a && b 左假右不算
|| 逻辑或 a || b 左真右不算
  • 短路实验

int a = 0, b = 1;
int x = (a && ++b);   // b 不会自增,因为左边已假
printf("b = %d\n", b); // 输出 1

四、位运算符(直接操作二进制)

运算符 名称 举例 功能说明
~ 位逻辑反(单目运算符) ~a 将变量 a 中的每一位取反
& 位逻辑与(双目运算符) a & b 将变量 a 和 b 逐位进行与操作
| 位逻辑或(双目运算符) a | b 将变量 a 和 b 逐位进行或操作
^ 位逻辑异或(双目运算符) a ^ b 将变量 a 和 b 逐位进行异或操作
<< 左移 a << 4 将变量 a 中的每一位向左移动4位
>> 右移 a >> 4 将变量 a 中的每一位向右移动4位

重要说明

  • 位运算符操作的对象是数据中的每一位(int 需要操作32个二进制位,short 需要操作16个二进制位...)
  • 运算规则
    • 位逻辑反、位逻辑与(有0得0)、位逻辑或(有1得1)拥有与逻辑运算相似的规则和一样的真值表
    • 异或运算:相同为0,不同为1
    • 移位运算:移出去的不要,空出来补(左移则补0,右移则补符号位)
实验示例

示例代码

① 快速置位/清位

#include <stdio.h>
#include <stdint.h>int main(void)
{uint8_t a = 0b10101010;  // 170uint8_t b = 0b11001100;  // 204printf("a & b = 0x%02X\n", a & b);  // 0x88 (0b10001000)printf("a | b = 0x%02X\n", a | b);  // 0xEE (0b11101110)printf("a ^ b = 0x%02X\n", a ^ b);  // 0x66 (0b01100110)printf("~a    = 0x%02X\n", ~a);     // 0x55 (0b01010101)printf("a << 2 = 0x%02X\n", a << 2); // 0xA8 (0b10101000)printf("a >> 2 = 0x%02X\n", a >> 2); // 0x2A (0b00101010)return 0;
}

② 交换两变量(无临时)

a ^= b;
b ^= a;
a ^= b;

五、赋值 & 复合赋值

赋值运算符

重要规则

  • 不能对常量赋值,只能对变量赋值
  • 不能对数组赋值(因为数组名字表示的是一个数据的地址)
  • 可以连续赋值,顺序从右到左
// 正确示例
int a, b, c;
a = b = c = 10;  // 连续赋值,等价于 c=10; b=c; a=b;// 错误示例
5 = a;           // ❌ 不能对常量赋值
int arr[5];
arr = {1,2,3};   // ❌ 不能对数组名赋值

复合赋值符说明

  • 当赋值符号左右两边有相同的操作数时,采用复合赋值符不仅直观,且能提高运算效率
  • 除了以下10个复合运算符之外,生造别的复合运算符是非法的
简单形式 复合形式 等价写法
a = a + b a += b 语义相同,复合更简洁
a = a - b a -= b ——
a = a * b a *= b ——
a = a / b a /= b ——
a = a % b a %= b ——
a = a & b a &= b 位运算同样适用
a = a | b a |= b ——
a = a ^ b a ^= b ——
a = a << n a <<= n ——
a = a >> n a >>= n ——

六、三目运算符(唯一三元)

  • 唯一需要三个操作数的运算符
  • 语法:表达式1 ? 表达式2 : 表达式3
  • 释义:当表达式1为真时,取表达式2,否则取表达式3
int m = (a > b) ? a : b;   // 取较大值
//等价于
int m;
if (a > b) m = a;
else m = b;

七、sizeof 与 return

sizeof 运算符

  • 含义:计算指定数据类型或者变量所占据内存的字节数(多大)
  • 语法:sizeof(类型) 、sizeof(变量名) ,计算变量的字节数时圆括号可以省略(一般会保留)
    举例
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(long double));int a[5];
printf("%d\n", sizeof(a));
printf("%d\n", sizeof a );

return运算符

  • 含义:退出某个函数(如果退出的是主函数main,那么整个程序也就退出了)
  • 语法:必须出现在函数体内,可以带函数对应类型的数据
    举例
int main()
{return 0;//说明:return 用于函数返回;main 函数返回 0 表示成功。
}char func()
{return 'H';
}

八、运算符优先级 & 结合性(速查表)

优先级 运算符 结合方向 记忆口诀
1 () [] -> . 左→右 括号下标成员
2 ! ~ ++ -- + - * & sizeof 右→左 单目
3 * / % 左→右 乘除模
4 + - 左→右 加减
5 << >> 左→右 移位
6 < <= > >= 左→右 关系
7 == != 左→右 相等
8 & 左→右 按位与
9 ^ 左→右 按位异或
10 | 左→右 按位或
11 && 左→右 逻辑与
12 || 左→右 逻辑或
13 ?: 右→左 三目
14 = += -= 右→左 赋值
15 , 左→右 逗号

实操建议:不确定就加括号,比背表更靠谱!
综合示例

int x = 5, y = 4, z;
z = x + y * 2 >> 1 & 3;   // 等价于:z = ((x + (y * 2)) >> 1) & 3;
printf("%d\n", z);        // 输出 1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/934818.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript内存泄露原因及解决方案

在 JavaScript 中,内存泄漏通常发生在不需要的内存没有被垃圾回收器释放时。以下是常见的几种情况: 1. 意外的全局变量 // 意外的全局变量 function foo() {bar = "这是一个全局变量"; // 没有使用 var/le…

数据类型扩展

整数扩展 整数按进制可以分为二进制0b(binary)开头,八进制0开头,十进制和十六进制0x开头; 因此,二进制的10输出为2,因为逢2进1,同样地,0x10代表16,因为在十六进制中,逢十六进1;同时,在十六进制中,10-15表…

python静态类型之any

python静态类型之any 漫思

2025 年最新金蝶云服务商推荐榜单:聚焦铂金伙伴技术实力与万级客户口碑,助力企业数字化转型精准选型上海金蝶云服务商推荐

当前数字经济浪潮下,企业数字化转型进程不断加快,ERP 系统作为转型核心支撑,其服务商的选择直接决定转型成效。但金蝶云服务商市场资质杂乱、服务能力悬殊,众多企业在选型时屡屡碰壁,不仅难以辨别服务商真实水平,…

OIFHA251011 比赛总结

比赛:OIFHA251011 日期:\(25.10.11\),场地:\(\text{OIFHA}\),排名:\(6/16\) 估分:\(100+100+0+20=220\) 终分:\(100+100+10+20=220\) 应该得分:\(100+100+10+40=250\) 失分 没想到 \(T_4\) 可以直接离线下来慢…

P2051 [AHOI2009] 中国象棋 个人题解

题目链接 题目描述: 给你一个 \(n*m\) 的棋盘,棋盘的每行和每列只能放置有 \(2\) 个棋子(可以放置 \(0\) 个棋子),问有多少种放置方案 解题方法: 这道题看起来像是八皇后问题的加强版,但是如果一个个枚举的话,…

一种智能调度分布式路径计算解决方案

本文分享自天翼云开发者社区《一种智能调度分布式路径计算解决方案》.作者:蒋辉 背景技术 传统的CDN动态加载智能路由系统对用户动态请求,主要通过探测服务器主动发起周期性的探测请求,探测CDN中转节点和源站的可用…

使用 C++ 和 minizip 实现 ZIP 压缩解压工具

在软件开发中,文件压缩和解压是常见的需求。今天我们来介绍一个基于 minizip 库的 C++ ZIP 工具类 - ZipUtility,它可以轻松地处理 ZIP 文件的创建和解压。这篇文章使用AI辅助编写。核心功能 1. 压缩功能 ZipUtility…

西部数码使用外部dns服务器怎么配置解析

西部数码使用外部dns服务器怎么配置解析在西部数码购买的域名如果使用的dns是外部的,要在该外部dns管理平台去设置解析 比如使用的阿里云的dns如何设置解析 在阿里云dns管理页面找到dns粘贴到西部数码该域名的解析地址…

一看就懂,Oracle认证体系中的OCP中级认证

对于刚接触Oracle数据库或者打算往数据库领域发展的人来说,需要了解一下这个认证:Oracle的中级认证OCP认证专家。 OCP认证全称为Oracle Certified Professional(甲骨文认证专家),是全球知名的IT技术认证体系之一,由…

实用指南:SDN 控制器深度剖析:架构、对比与实践部署

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025 年试验机生产厂家最新推荐榜单:聚焦优质企业,助力精准选购高低温等各类试验设备弹簧拉压/弹簧疲劳/高频弹簧疲劳/U型弹簧专用试验机厂家推荐

在工业生产与科研检测的关键环节,试验机对保障产品质量、验证材料性能起着不可替代的作用。随着市场需求激增,试验机生产厂家数量骤增,但行业乱象也随之显现,产品质量参差不齐、技术水平差距悬殊、服务体系不完善等…

IIS/如何查看IIS上部署网站的实时连接数

我们在IIS发布的Web网站,如何查看网站实时的连接数呢? 1、首先打开运行框,输入perfmon.msc 2、打开监视工具-->性能监视器 3、点击 “+”号,添加计数项 Web Service/Current Connections 4、可以查看到网站的实…

Supabase:无需后端代码的 Web 开发完整解决方案

在现代 Web 应用开发中,构建 MVP(最简可行产品)时,后端基础设施的搭建常常成为主要瓶颈。开发者需要处理数据库、API、用户认证、权限控制、文件存储等多个模块,开发成本较高。 Supabase 提供了一种替代方案:它以…

Halo RAG!

Halo AI 助手插件最新版本深度集成了 RAG 问答功能,支持将 Halo 文章或 Docsme 文档作为知识库,为访客提供智能问答服务。用户需先创建知识库,配置嵌入模型并选择内容范围以建立索引;随后创建问答应用,关联知识库…

拼叨叨砍价系统:实体店低成本引流的营销利器

在互联网营销深入各行业的当下,“砍一刀” 凭借强社交裂变属性,已成为大众熟知的营销模式。拼叨叨砍价系统基于这一模式,针对实体店商家营销痛点,打造出轻量化、易操作的砍价活动模块,支持微信公众号部署,能帮助…

2025 自动门生产厂家最新推荐榜:权威筛选优质品牌,含选购指南与实力厂家深度解析

在出入口自动化浪潮下,自动门已成为商业综合体、医院、工业厂区等场景的刚需设备,但其市场呈现 “繁荣与乱象并存” 的态势。部分品牌缺乏核心技术,产品故障率高、寿命短,无形中增加使用成本;售后体系缺失导致故障…

grafana-使用grafana-image-renderer:v4.0.17渲染仪表盘图像

grafana-使用grafana-image-renderer:v4.0.17渲染仪表盘图像v4.0.17需要grafana版本在11.3.8以上。我的是centos7, 升级grafana很简单,备份一下数据和配置,然后停掉grafana服务,然后使用【rpm -Uvh 新版本的rpm包 …

医德出诊排班挂号管理系统:医院高效运营与便民服务的智能解决方案

在数字化医疗浪潮下,传统挂号模式的低效、信息不透明等问题日益凸显,患者就医体验不佳,医院管理压力也持续增加。医德出诊排班挂号系统作为一款聚焦医疗服务场景的数字化工具,依托微信公众号生态,整合出诊排班、预…

一佳教育培训课程系统小程序:一站式教育数字化解决方案

在数字化教育浪潮下,培训机构对高效、多功能的线上教学管理工具需求迫切。一佳教育培训课程系统小程序应运而生,涵盖微信小程序版本,支持微擎系统交付,集课程管理、学员运营、营销推广、商城功能于一体,以加密源码…