表达式由运算符、常量及变量构成,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. WCF入门

    一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NE ...

  2. 演示get、post请求如何算sn,算得sn如何使用

    import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.UnsupportedEncoding ...

  3. 【JavaScript与JQuery获取H2的内容】

    撰写日期:2016-7-13 11:05:07 JavaScript与JQuery获取DOM内容是有区别的,接下来看一例子 栗子: Jquery-获取H3中的内容然后Dom转换为Jquery < ...

  4. linux 设置mysql 数据库编码utf8

    转载地址http://www.linuxidc.com/Linux/2015-08/121676.htm在MySQL数据库中, 当插入数据无法支持中文时, 可将该数据库的编码集设置为utf8, 故在创 ...

  5. DNS(二)之bind的视图功能

    bind视图工作原理 在我国目前的网络环境下面,多个运营商并存,运营商之间的存在一定的网络互通问题,如果把来自不同的运营商或者地域的所有用户通过简单的A记录分配到一个机房,那么就存在部分网民访问延时大 ...

  6. 网站缓存数据到tomcat服务器

    通过缓存使相同的数据不用重复加载,降低数据库的访问 public class CacheFilter implements Filter { //实例变量[每线程共享] private Map< ...

  7. BZOJ树链剖分题目汇总

    1036,2157,2243,4034,4196;2325,2908,3083,3159,3531,3626,3999;可以不树剖:1146;2819,2843,4448,4530.

  8. char *p = "abcdefg"; p[0] = p[1]出错

    参考:http://blog.sina.com.cn/s/blog_5c0172280100ut4o.html 1.char *s="abc"; 看这个赋值: 右边,是" ...

  9. 提取hdfs文件名的方法

    #!/bin/bash #------------------------------------------------------------- # 把目录中的所有文件getmerge到本地 # ...

  10. scrapy1_官网教程

    https://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html 本篇文章主要介绍如何使用编程的方式运行Scrapy爬虫. 在开始本文之 ...