news 2026/8/7 11:31:59

从零开始的敲代码生活--C语言篇(运算符)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零开始的敲代码生活--C语言篇(运算符)

运算符包括算术运算符、关系运算符、逻辑运算符、赋值运算符、逗号运算符等

一、运算符分类

1. 算术运算符

符号:+ - * / % ++ --(加,减,乘,除,取余,自增,自减)

其中+ - * / %为双目运算符(两个操作数),++ --为单目运算符(一个操作数)

对于整型除法:直接舍去小数,只保留整数,对于浮点除法:保留小数

%取余(求模)只能用于整型(char/short/int/long),不能用于 float/double,其运算结果符号与左操作数保持一致

++、--自增自减可分为前置与后置两种:

前置:++num(--num),先+1(-1)后再使用值;

后置:num++(num--),先使用原值,运算结束后再+1(-1)

注意:自增自减只能作用于变量,不能作用于常量 / 表达式

2.赋值运算符

符号:= += -= *= /= %=(均为双目运算符)

对于赋值运算符,其左值必须是可修改变量,不能是常量、表达式、数组名

复合赋值等价展开:例如num += 10等价于num = num + 10,num %= 3等价于num = num % 3

链式赋值(自右向左结合):例如a = b = c = 5;等价 c=5; b=c; a=b;

3. 关系运算符

符号:< > <= >= == !=(均为双目运算符)

关系运算符的结果为逻辑结果,即1(真),0(假)

需注意:连续比较不能简写,例如6 < j < -2,其等价于等(-6<j) 结果0/1 再与-2比较

4.逻辑运算符

符号:&& || !(逻辑与,逻辑或,逻辑非)

&&逻辑与(双目):全真才为真,一假则假(左右同时为真时结果为真,左右有一个为假结果即为假)

短路:当左边为假时,右边完全不执行

||逻辑或(双目):一真即为真,全假才假(左右有一个为真结果即为真,左右同时为假时结果为假)

短路:当左边为真时,右边完全不执行

!逻辑非(单目):取反,非 0 变 0,0 变 1

5.三目运算符

符号: ? :(唯一三目运算符)

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

逻辑:条件为真执行表达式 1,条件为假执行表达式 2

结合性:自右向左,整体是一个表达式,有返回值

6.逗号运算符

符号:,

优先级全运算符最低

规则:从左往右依次执行所有表达式,最终结果为最后一个表达式的值

例如num = 2+3, 4*5, 6-4;等价于(num=5), 20, 2; num=5

用途:for 循环多变量初始化 / 步进

7. sizeof 运算符

功能:用于计算数据 / 变量 / 类型在内存占用字节数,其返回值为unsigned long

例如sizeof(int)或sizeof(num)

64 位系统下所有指针sizeof(指针) = 8字节

数组名单独放入 sizeof:代表整个数组总字节;数组作为函数形参时退化为指针,sizeof 仅为 8

二、运算符优先级

层级运算符类型符号结合方向
1括号()
2单目运算符! ~ ++ -- * & sizeof
3算术乘除取余* / %
4算术加减+ -
5移位<< >>
6关系大小比较> < >= <=
7相等判断== !=
8按位与&
9按位异或^
10按位或``
11逻辑与&&
12逻辑或``
13三目运算符? :
14赋值运算符= += -= *= /= %=
15逗号运算符,

三、类型转换

C 语言运算时,不同数据类型会自动 / 强制转换,分为隐式自动转换、显式强制转换两大类

1. 隐式类型转换

隐式类型转换系统自动转换,无需手动写代码

运算时编译器自动将低精度 / 小范围类型转为高精度 / 大范围,保证运算精度不丢失

精度优先级(从低→高):

整型:char/shortintlongunsigned long

浮点:floatdouble(float 参与运算一定会提升为 double)

无符号 > 同长度有符号(如 unsigned int 高于 int)

整体层级:char/short < int < long < float < double

强制转换规则:

char、short只要参与算术运算、比较运算,无条件先转 int

浮点与整型混合运算:整型转浮点

有符号与无符号同长度运算:有符号转为无符号(极易出现负数变超大正数 bug)

赋值转换(特殊隐式转换) 等号右边类型自动适配左边变量类型,会发生截断 / 补位:

浮点赋值给整型:直接舍弃小数,只保留整数

大数据存入小类型:高位截断,只保留低位字节

小数据存入大类型:正数高位补 0,负数高位补符号位 1

2. 显式强制类型转换

手动转换,格式:(目标类型)表达式

语法:(类型)数据;或(类型)(表达式);

使用复杂表达式建议加括号

特性:

(1)仅临时转换本次运算的值,不会改变原变量本身存储内容

(2)高精度强制转低精度:精度丢失、数值截断、符号错乱

(3)无符号、有符号互相强制转换:直接拷贝内存二进制(补码原样保留)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/7 11:31:43

Suno 为 AI 音乐加水印,限制下载防滥用

AI 音乐生成公司 Suno 宣布为 AI 生成歌曲添加不可见水印&#xff0c;并引入下载次数限制&#xff0c;以遏制大规模盗用与版权滥用。此举被视为 AI 音乐产业走向合法化的重要一步。 一、AI 音乐的版权困境 过去两年&#xff0c;生成式 AI 在音频领域取得突破&#xff0c;从简…

作者头像 李华
网站建设 2026/8/7 11:30:07

Unity RPG游戏开发:从核心系统到模块化架构实战指南

1. 项目概述&#xff1a;为什么从核心系统入手是构建RPG的关键很多刚接触Unity3D的朋友&#xff0c;尤其是对RPG&#xff08;角色扮演游戏&#xff09;充满热情的开发者&#xff0c;常常会陷入一个误区&#xff1a;一上来就想着复刻某个3A大作的华丽画面&#xff0c;或者沉迷于…

作者头像 李华
网站建设 2026/8/7 11:30:00

Git急救手册:30秒解决常见版本控制问题

1. 项目概述&#xff1a;为什么需要Git急救手册&#xff1f; 版本控制系统就像代码的时间机器&#xff0c;而Git作为目前最主流的分布式版本控制工具&#xff0c;几乎成为开发者必备技能。但在日常开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;刚提交完代码就发现漏…

作者头像 李华
网站建设 2026/8/7 11:28:58

FRDM-MCXA153开发实战:从环境搭建到低功耗设计全解析

1. 项目概述&#xff1a;为什么是FRDM-MCXA153&#xff1f; 如果你最近在关注微控制器领域&#xff0c;特别是恩智浦的产品线&#xff0c;那么MCXA系列绝对是一个绕不开的话题。而FRDM-MCXA153&#xff0c;作为这个新系列中面向主流应用的开发板&#xff0c;它更像是一个“敲门…

作者头像 李华
网站建设 2026/8/7 11:28:34

终极指南:如何用Umi-OCR实现高效本地文字识别与批量处理

终极指南&#xff1a;如何用Umi-OCR实现高效本地文字识别与批量处理 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片&#xff0c;PDF文档识别&#xff0c;排除水印/页眉页脚&#xff0c;扫描/生成二维码。内置多国语…

作者头像 李华