表达式由运算符、常量及变量构成,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. POJ 2533 Longest Ordered Subsequence(最长上升子序列(NlogN)

    传送门 Description A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subseque ...

  2. [转]Zookeeper原理及应用场景

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等.Zookeeper是hadoop的一个子项目,其 ...

  3. 全栈必备 Linux 基础

    Linux 几乎无处不在,不论是服务器构建,还是客户端开发,操作系统的基础技能对全栈来说都是必备的.系统的选择Linux发行版本可以大体分为两类,一类是商业公司维护的发行版本,一类是社区组织维护的发行 ...

  4. React Native 开发之 (05) flexbox布局

    一  flexbox布局 1 flex布局 flexbox是ReactNative 应用开发中必不可少的内容,也是最常用的内容. 传统的页面布局是基于盒子模型,依赖定位属性,流动属性和显示属性来解决. ...

  5. JavaWeb---总结(五)Http协议

    一.什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的 ...

  6. chown -R命令的使用

    chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID:组可以是组名或者组ID:文件是以空格分开的要改变权限的文件列表,支持通配符.系统管理员经常使用chown命令,在将文件拷贝 ...

  7. JavaScriptCore框架介绍

    http://www.cocoachina.com/ios/20140409/8127.html 这个框架其实只是基于webkit中以C/C++实现的JavaScriptCore的一个包装,在旧版本i ...

  8. 设计模式-观察者模式(List列表维护观察者)

    namespace ConsoleApplication1{ interface IObserver { void ReceiveMsg(string msg); } class Observer : ...

  9. win7下如何建立ftp服务器

    前段时间正在做一个项目,需要上传东西到ftp服务器,纠结于如何建立ftp服务器.经过一番摸索.终于成功建立ftp服务器.现将我的经验跟大家分享一下.不足之处还望多多指点! 步骤/方法 首先在本地机器上 ...

  10. 20145212《Java程序程序设计》课程总结

    20145212<Java程序程序设计>课程总结 一.每周读书笔记链接汇总 第一周读书笔记 第二周读书笔记 第三周读书笔记 第四周读书笔记 第五周读书笔记 第六周读书笔记 第七周读书笔记 ...