尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
数据的运算:C运算符与类型转换
C运算符与类型转换写在前面本文承接《数据的表现形式》继续整理C语言中“数据如何参与运算”这一部分内容。文章从初学阶段最常见的运算符出发说明它们的基本用法、优先级、结合性以及混合运算中的类型转换。部分较复杂、暂不影响后续学习的规则不在本文展开。如有错误或不足烦请斧正。数据有了表现形式还要经过运算才能真正参与程序的处理。加减乘除只是其中最直观的一部分比较、逻辑判断、赋值和类型转换同样由运算符完成。C语言中的运算符很多。按常见教材的分类主要包括算术运算符、关系运算符、逻辑运算符、强制类型转换运算符、赋值运算符、条件运算符、逗号运算符、求字节数运算符、指针运算符、位运算符、成员运算符、下标运算符、函数调用运算符本文主要介绍和说明前8种运算符。算术运算符算术运算符包括加号 减号- 乘号* 除号/ 求余运算符% 自增运算符 自减运算符–其中加减乘号同数学。除号当两个运算对象都是整数时进行整数除法结果仍为整数若结果含有小数部分则直接向零截断而不是四舍五入。例如5 / 2的结果为2-5 / 2的结果为-2。当至少一个运算对象是浮点型时系统会先按照通常算术转换确定两者的共同类型再进行浮点除法。例如float型与int型相除结果类型为floatdouble型与int型相除结果类型为double。商的正负遵循数学的符号运算规则。除数不能为0否则程序的行为未定义。求余运算符%的两个运算对象必须都是整数结果也为整数。结果不为0时其符号与被除数相同。例如-5 % 2的结果为-1。除数同样不能为0。自增运算有i和i两种形式。i产生的是i自增前的值同时使i的值加1i先使i的值加1再产生自增后的值。只有当表达式的值被使用时二者的区别才会体现出来若单独写成i;或i;效果相同。#includestdio.hintmain(){intm,i1;mi;printf(%d %d,m,i);return0;}/* 输出结果 1 2 */#includestdio.hintmain(){intn,i1;ni;printf(%d %d,n,i);return0;}/* 输出结果 2 2 */自减运算符同理。二元双目算术运算符中*、/、%的优先级相同并且高于、-同一优先级内从左向右结合。自增、自减等单目运算符的优先级见文末汇总。关系运算符关系运算符有大于()、大于或等于()、小于()、小于或等于()、等于()、不等于(!)其中优先级相同!优先级相同前四者优先级高于后两者。用关系运算符将两个数值或数值表达式连接起来的式子称为关系表达式。关系表达式的结果类型为int关系成立时值为1不成立时值为0。关系表达式自左向右结合。若a1,b3,c -1, 则ab的值为0ac的值为1 dabc则d的值为1,因为ab的值为0下一步0c的值为1赋给d. 若d5,则dabc的值为0注意区分和,前者是赋值运算符后者是等于号 dabc是连接数值和关系表达式的赋值表达式最终把值赋给d dabc是关系表达式。 d a b c等价于d ((a b) c) d a b c等价于d ((a b) c)。因此C语言中的a b c并不表示数学中的“a b且b c”。若要表达这一含义应写成a b b c。逻辑运算符逻辑运算符按优先级从高到低有非(!)、与()、或(||)。C语言在判断条件时将0视为“假”将任何非零值视为“真”。但“非零为真”不表示非零值会自动变成1关系运算和逻辑运算的结果才是int型的0或1。只有两个运算对象均为“真”表达式才为“真”||只要两个运算对象中有一个为“真”表达式就为“真”。和||都从左向右判断并具有短路特性对于若左边已经为假右边不再计算对于||若左边已经为真右边不再计算。a4,则!a的值为0 表达式5420的值为1 表达式54||20的值为1 表达式54||20的值为1 表达式54||20的值为0强制类型转换运算符强制类型转换运算符可以将一个表达式的值转换为指定类型一般形式为(类型名)表达式表达式较复杂时可以写成(类型名)(表达式).(double)a// 将a的值转换为double型(float)(7%3)// 将7 % 3的结果转换为float型强制类型转换会产生一个指定类型的转换结果但不会因此改变原变量本身的类型。仅仅写出(double)aa的类型和值都不会改变。类型转换过程中可能丢失信息例如(int)3.8的结果为3。赋值运算符将右边的值赋给左边的变量即存放数据符号为,结合性为自右向左。inta;a3;//将3赋给变量a除基本赋值运算符外赋值运算符还包括、-、*、/、%等复合赋值运算符。基本赋值会将右边的值转换为左侧变量的类型再存入左侧变量结合性为从右向左。条件运算符一般形式为表达式1?表达式2:表达式3若表达式1为非零值只计算表达式2并将其结果作为整个条件表达式的值若表达式1为0只计算表达式3。如(ab)?x:y含义是如果ab成立则该条件表达式的值为x否则为y.逗号运算符一般形式表达式1,表达式2,表达式3,...,表达式n各表达式按照从左向右的顺序依次计算整个逗号表达式的值与最后一个表达式的值相同。inta,b,c;a1,b2,cab;//先把1赋给变量a再把2赋给变量b最后把ab的值赋给c//整个表达式的值也为3.注意变量声明和函数参数列表中的逗号只是分隔符不是逗号运算符。例如int a, b, c;中的两个逗号都不是逗号运算符。求字节数运算符sizeof用于求某个表达式的类型或指定类型所占的字节数一般写作sizeof(表达式)或sizeof(类型名)。它是运算符不是函数结果类型为size_t。#includestdio.hintmain(void){inta;printf(%zu\n,sizeof(a));return0;}//多数情况下输出结果为4因为多数编译系统给基本整型分配4字节不同数据间的混合运算与类型转换本文涉及的运算符优先级从高到低可概括为后缀自增、自减 单目运算符与强制类型转换 *、/、%、-、、、、!|| 条件运算符 赋值运算符 逗号运算符。圆括号可以用来明确表达式的组合方式。优先级和结合性决定的是表达式怎样组合不等于各部分实际的求值顺序。遇到复杂表达式时最好主动加上括号或者将其拆成多条语句。同一优先级内本文涉及的大多数二元运算符从左向右结合单目运算符、条件运算符和赋值运算符从右向左结合。不同类型的数据一起进行算术运算时C语言通常会先把本次运算中使用的值临时转换为同一种类型再进行计算原变量的类型不会因此改变。例如int型与double型运算时int型的值会临时转换为double型int型与float型运算时int型的值会临时转换为float型。char、short等较小的整数类型只和整数一起运算时通常会先转换为int型这称为“整数提升”。赋值或强制类型转换则会把值转换为目标类型在这个过程中可能丢失信息。运算符本身并不难真正容易出错的是把数学中的直觉直接带进C语言整数相除不会保留小数连续关系运算不等于数学中的连写非零代表“真”却不一定等于1优先级也只决定表达式如何组合。遇到稍复杂的表达式时可以先判断运算对象的类型再用括号明确组合方式最后分步验证。至此数据不再只是被存储也开始真正参与计算、比较与判断。学习路上我们常在。
RELATED

相关推荐

基于RGBD相机的视觉SLAM:从原理到实践实现三维重建与定位

基于RGBD相机的视觉SLAM:从原理到实践实现三维重建与定位

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/23 9:49:21
基于微信小程序的食品溯源系统(源码+文档+部署讲解等)

基于微信小程序的食品溯源系统(源码+文档+部署讲解等)

联系博主 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 …

📅 2026/9/17 15:19:04
铝合金电缆产能与交付能力观察:广东胜宇电缆适配场景分析

铝合金电缆产能与交付能力观察:广东胜宇电缆适配场景分析

前言:行业背景与分析意义在“双碳”战略持续推进、新型电力系统加速构建的背景下,铝合金电缆因其轻量化、良好导电性、优异耐腐蚀性及显著的成本优势,正逐步成为中低压配电、新能源配套、轨道交通等领域的主流选择。然而,当前市场…

📅 2026/10/8 20:10:40
MORE NEWS

更多资讯

📰

大模型推理弹性扩容新范式:Upcycle与YOCO协同优化显存与计算

1. 项目概述:当大模型扩容不再只是“堆卡”——KITE框架里Upcycle与YOCO的务实合流最近在几个核心AI工程团队的内部技术复盘会上,反复听到一个词:“KITE”。不是风筝,也不是某个新出的开源库代号,而是指代一套正在被高…

📰

geckodriver配置与Selenium Firefox自动化打包排错实战

简介:面向使用 Python 进行 Web 自动化测试、网络爬虫和桌面脚本开发的读者,这份资源提供了可运行的 Python 环境文件以及 Firefox 自动化驱动 Geckodriver,重点解决 Selenium 调用浏览器时驱动缺失、依赖组件不全和运行环境配置繁琐等问题。…

📰

LXC原理与实战:Linux内核级容器技术详解

1. LXC到底是什么,它和Docker、虚拟机有啥区别?LXC(Linux Containers)这个词在运维圈和开发圈里经常被提起,但很多人第一次听到时会下意识把它和Docker划等号,或者误以为是“轻量级虚拟机”。其实这种理解既…

📰

军工卫星视频传输的WebUploader增强方案

1. 军工行业卫星视频传输的特殊挑战军工行业的卫星视频传输系统面临着几个独特的技术挑战。首先,卫星视频文件通常体积庞大,单个文件可能达到几十GB甚至上百GB。这类文件在传统HTTP上传过程中容易出现超时、中断等问题,而军工领域的网络环境往…

📰

深入解析AQS原理与ReentrantLock实现

1. 从ReentrantLock的加锁流程看AQS本质第一次看到ReentrantLock的lock()方法实现时,很多人会困惑为什么一个简单的加锁操作需要如此复杂的代码结构。实际上,这正是AQS(AbstractQueuedSynchronizer)设计精妙之处——它将同步器的公…

📰

Java工程师转型大模型:核心技能与高薪路径

1. 转型背景与行业现状2023年被称为AI大模型爆发的元年,ChatGPT的横空出世彻底改变了技术行业的格局。作为一名有5年经验的Java后端工程师,我清晰地记得第一次使用GPT-4时的那种震撼——它不仅能理解复杂的技术问题,还能给出可运行的代码解决…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬