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

【时时三省】(C语言基础)算术表达式和运算符

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省

算术表达式和运算符的优先级与结合性

用算术运算符和括号将运算对象(也称操作数)连接起来的,符合C语法规则的式子称为C算术表达式。运算对象包括常量、变量、函数等。例如,下面是一个合法的C算术表达式:

a * b / c- 1.5 + ' a '

C语言规定了运算符的优先级(例如先乘除后加减),还规定了运算符的结合性。

在表达式求值时,先按运算符的优先级别顺序执行,如表达式a-bxc,b的左侧为减号,右侧为乘号,而乘号优先级高于减号,因此,相当于a- ( b * c )。

如果在一个运算对象两侧的运算符的优先级别相同,如a-b + c ,则按规定的“结合方向”处理。C语言规定了各种运算符的结合方向(结合性),算术运算符的结合方向都是“自左向右”即先左后右,因此b先与减号结合,执行a-b的运算,然后再执行加c的运算“自左至右的结合方向”又称“左结合性”,即运算对象先与左面的运算符结合。以后可以到有些运算符的结合方向为“自右至左”,即右结合性(例如,赋值运算符,若有a = b = c从右到左顺序,先把变量c的值味给变量b,然后把变量b的值赋给变量a)。关于“结合性的概念在其他一些高级语言中是没有的,是C语言的特点之一。

说明:不必死记,只要知道,算术运算符是自左至右(左结合性),赋值运算符是自至左(右结合性)

不同类型数据间的混合运算

 

在程序中经常会遇到不同类型的数据进行运算,如5 * 4.5。如果一个运算符两侧的据类型不同,则先自动进行类型转换,使二者成为同一种类型,然后进行运算。整型、实型、字符型数据间可以进行混合运算。

规律为:

( 1 ) +、一、*、/运算的两个数中有一个数为float或double型,结果是double型,因系统将所有float型数据都先转换为double型,然后进行运算。

( 2 )如果int型与float或double型数据进行运算,先把int型和float型数据转换double型,然后进行运算,结果是double型。

( 3 )字符(char)型数据与整型数据进行运算,就是把字符的ASCII代码与整型数据行运算。如:12 + ' A ',由于字符A的ASCII代码是65,相当于12 + 65,等于77。如果字型数据与实型数据进行运算,则将字符的ASCII代码转换为double型数据,然后进行运算

分析下面的表达式,假设已指定i为整型变量,值为3,f为float型变量,值为2.5,d为double型变量,值为7.5。

10 + ' a ' + i*f-d / 3

编译时,从左至右扫描。

强制类型转换运算符

可以利用强制类型转换运算符将一个表达式转换成所需类型。例如:( double ) a(将a转换成double型)( int ) ( x+y )(将x+y的值转换成int型( float ) ( 5% 3 )(将5% 3的值转换成float型)其一般形式为

(类型名)(表达式)

注意,表达式应该用括号括起来。如果写成

( int ) x+y

则只将x转换成整型,然后与y相加。

需要说明的是,在强制类型转换时,得到一个所需类刑的中间数据,而原来变量的类型未发生变化。例如:

a = ( int ) x

如果已定义x为float型变量,a为整型变量,进行强制类型运算( int ) x后得到一个int类型型的临时值,它的值等于x的整数部分,把它赋给a,注意x的值和类型都未变化,仍为float型。该临时值在赋值后就不再存在了。

从上可知,有两种类型转换。一种是在运算时不必用户干预,系统自动进行的类型转换,如3 + 6.5。另一种是强制类型转换。当自动类型转换不能实现目的时,可以用强制类型转换。如%运算符要求其两侧均为整型量,若x为float型,则x% 3不合法,必须用( int ) x% 3。

相关文章:

  • 如何在 Aptos 上铸造 NFT
  • 网络安全可以从事什么工作?
  • Android14 OTA升级
  • 大模型如何协助知识图谱进行实体关系之间的分析
  • 【Azure 架构师学习笔记】- Azure Databricks (16) -- Delta Lake 和 ADLS整合
  • Android14 OTA差分包升级报Package is for source build
  • 计算机毕业设计SpringBoot+Vue.js物流管理系统(源码+文档+PPT+讲解)
  • 推导二项型事件的随机变量标准误差:两种方法
  • GNU Binutils 全工具指南:从编译到逆向的完整生态
  • 铺地毯!!!
  • P3385 【模板】负环
  • 阿里云oss开发实践:大文件分片、断点续传、实时进度 React+Node+Socket.IO
  • Windows 图形显示驱动开发-WDDM 3.2-本机 GPU 围栏对象(二)
  • 5c/c++内存管理
  • 【DeepSeek 】学习编程的利器:DeepSeek 使用指南
  • react中如何使用使用react-redux进行数据管理
  • FastGPT 引申:奥运选手知识图谱构建与混合检索应用
  • arthas快速入门
  • 后端架构模式之-BFF(Backend-For-Frontend)
  • 康谋分享 | 3DGS:革新自动驾驶仿真场景重建的关键技术
  • 联合国:欢迎俄乌伊斯坦布尔会谈,希望实现全面停火
  • 小雨伞保险经纪母公司手回集团通过港交所聆讯
  • 刘国中将出席第78届世界卫生大会并顺访瑞士、访问白俄罗斯
  • 严打金融黑灰产,今年来上海警方破获各类经济犯罪案件690余起
  • 鸿海下调全年营收展望:AI服务器业务强劲,预计今年营收增超50%
  • 深圳中院回应“退休夫妻月入1.2万负债1.2亿”:其自述因经营不善负债