表达式由运算符、常量及变量构成,C语言的表达式基本遵循一般代数规则。有几种运算法则是 C 语言表达式特有的。

2.7.1 表达式中的类型转换

同一表达式中的不同类型常量及变量在运算时需要变量为同一数据类型。C 语言的编译程序将所有操作数变换为与最大类型操作数相同的类型。如下例所示:

char c = 85;							// 声明字符型变量并赋值
int i = 3; // 声明整型变量并赋值
float f = 6.382; // 声明单精度浮点型变量并赋值
double d = 2.71745, result; // 声明双精度浮点型并赋值
result = c / i + f * d - ( f + i ); // 用表达式的结果为double型变量赋值

该例中,表达式内最大的数据类型 double 成为该表达式返回值的数据类型。但并非一开始就将表达式转换成同一类型再计算,而是根据需要一步步转换,这种特性能影响计算结果。

2.7.2 构成符 cast

可以通过称为 cast 的构成符强迫表达式变为特定类型。其一般形式为:

(数据类型)表达式

“(数据类型)” 是标准 C 语言的一个数据类型。这种方式常用在较大的类型转为较小的类型,如下例所示:

int d = 5, result;				// 声明整型变量并赋值
float f = 6.382; // 声明单精度浮点型变量并赋值
result = d * (int) f; // 将变量强制转换为整型再计算

此例的计算结果为 30,在运算之初已将变量 f 强制转换为整型。假若没有使用构成符,表达式 result = d * f 的结果为
31,因为变量首先被转换成单精度浮点型运算,然后赋值时再被转为整型。

2.7.3 空格 与 括号

为了增加可读性,可以随意在表达式中插入 Tab 和 空格符。例如,下面两个表达式是相同的。

result = c / i + f * d - ( f + i );
result = c / i + f * d - ( f + i );

括号可改变表达式的执行顺序,可用的括号有小括号 “()” 和 中括号 “[]”,中括号的优先级稍低。使用方法如下例所示:

result = c / [ ( i + f ) * d - ( f + i ) ];

小括号内的表达式首先被计算,然后是中括号里的表达式。冗余的括号并不导致错误或减慢表达式的执行速度,因为编译后的机器代码里已根据括号编排好了计算顺序,多余的括号被忽略。我们鼓励使用括号,它可使执行顺序更清楚一些。

2.7.4 C 语言中的简写形式

C 语言为常用赋值语句提供了简写形式。例如语句 “x = x + 5;”可以简化为 “x += 5;”。这种简化的形式适用于 C 语言的二目运算符,包括加、减、乘、除、取模。如下例所示:

c = c / ( a * b -c % b++ );		// 原表达式
c /= a * b - c % b++; // 简化后的表达式

是否对表达式简化取决于哪种方式更能直接体现出算法的实际意义,以及更容易被读懂。

【C语言入门教程】2.7 表达式的更多相关文章

  1. 《Ruby语言入门教程v1.0》学习笔记-01

    <Ruby语言入门教程v1.0> 编著:张开川 邮箱:kaichuan_zhang@126.com 想要学习ruby是因为公司的自动化测试使用到了ruby语言,但是公司关于ruby只给了一 ...

  2. C语言入门教程-(5)格式化输入输出

    1.输入和输出 在程序的使用中,我们经常可以看的这么一个场景:用户需要输入数据,经过程序运算,得到结果后输出.在C语言中,输入数据和输出数据都是由库函数完成的,通过语句来输入/输出. 2.格式化输出— ...

  3. 《JavaScript语言入门教程》记录整理:入门和数据类型

    目录 入门篇 js介绍 历史 基本语法 数据类型 概述 null 和 undefined 数值 字符串 对象 函数 数组 本系列基于阮一峰老师的<JavaScrip语言入门教程>或< ...

  4. 《JavaScript语言入门教程》记录整理:运算符、语法和标准库

    目录 运算符 算数运算符 比较运算符 布尔运算符 二进制位运算符 void和逗号运算符 运算顺序 语法 数据类型的转换 错误处理机制 编程风格 console对象和控制台 标准库 Object对象 属 ...

  5. Go语言入门教程(十)之函数

    Hello 各位小伙伴大家好,我是小栈君,假期一眨眼就过去了.不知道大家玩的是否开心呢? 上次我们讲到了关于Go语言的流程控制,小栈君也希望小伙伴跟着小栈君一步一个脚印的敲一下代码,相互进步.本期我们 ...

  6. c语言该怎么入门?C语言入门教程(非常详细)

    C语言是一门面向过程的编译型语言,它的运行速度极快,仅次于汇编语言.C语言是计算机产业的核心语言,操作系统.硬件驱动.关键组件.数据库等都离不开C语言:不学习C语言,就不能了解计算机底层. 这套「C语 ...

  7. 《JavaScript语言入门教程》记录整理:面向对象

    目录 面向对象编程 实例对象与 new 命令 this关键字 对象的继承 Object对象的方法 严格模式(strict mode) 本系列基于阮一峰老师的<JavaScrip语言入门教程> ...

  8. Go 语言入门教程,共32讲,6小时(已完结)

    Go语言入门教程,共32讲,6小时(完结) 在B站:https://www.bilibili.com/video/BV1fD4y1m7TD/

  9. c语言入门教程 / c语言入门经典书籍

    用C语言开始编写代码初级:C语言入门必备(以下两本书任选一本即可) C语言是作为从事实际编程工作的程序员的一种工具而出现的,本阶段的学习最主要的目的就是尽快掌握如何用c语言编写程序的技能.对c语言的数 ...

  10. 【转】c语言入门教程 / c语言入门经典书籍

    用C语言开始编写代码 初级:C语言入门必备 (以下两本书任选一本即可) C语言是作为从事实际编程工作的程序员的一种工具而出现的,本阶段的学习最主要的目的就是尽快掌握如何用c语言编写程序的技能.对c语言 ...

随机推荐

  1. HTML5学习总结-06 WebWorker

    一 WebWorkder 它允许开发人员编写能够长时间运行而不被用户所中断的后台程序,去执行事务或者逻辑,并同时保证页面对用户的响应.简而言之,就是允许JavaScript创建多个线程,但是子线程完全 ...

  2. iOS - 果冻效果

    具体使用的CADisplayLink和贝塞尔曲线 下载地址:https://github.com/nLoser/CustomAnimation 效果: // // DisplayView.m // C ...

  3. 真机调试之android手机+chrome

    真机调试之android手机+chrome 虽然chrome上的移动设备模拟器很强大,但是在真机运行的时候,总会遇到一些小问题,这时就需要使用真机调试了. 第一步:准备一台android手机,并在手机 ...

  4. 机器学习---python环境搭建

    一 安装python2.7 去https://www.python.org/downloads/ 下载,然后点击安装,记得记住你的安装路径,然后去设置环境变量,这些自行百度一下就好了. 由于2.7没有 ...

  5. springmvc 注解 配置文件解释

    概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Spring 2.5 又为 Spring MVC 引入了注解驱动功能.现在你无须让 Controller 继承任何接口,无需在 ...

  6. ADS1.2安装教程

    工具/原料 ADS1.2 ADS1.2安装教程 1 在安装包内找到”Setup“,点击安装. 点击”Next“.然后进入License Agreement ,点击”Yes“. 点击了Yes之后,我们选 ...

  7. vs------密钥

    HM6NR-QXX7C-DFW2Y-8B82K-WTYJV

  8. 一张图总结docker命令

  9. Interesting things in Unity 4.5 you probably didn't know about

    http://va.lent.in/interesting-things-in-unity-4-5-you-probably-didnt-know-about/

  10. PHP代码质量优化

    最近总结了一些平常写PHP代码时的一些优化分享给大家. 1.尽量使用绝对路径 相对路径中会检查很多路径,这时我们可以使用绝对路径,但绝对路径不利于后期维护,所以define定义的时候使用__FILE_ ...