表达式由运算符、常量及变量构成,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. gvim e303 无法打开 “[未命名]“的交换文件,恢复将不可能

    今天vim出现:“gvim e303 无法打开 “[未命名]“的交换文件,恢复将不可能” 解决办法: 修改你的.vimrc,增加下面的一行: set directory=.,$TEMP "默 ...

  2. JSF JQUERY 使用datepicker

    不推荐使用.可以用primefaces的p:Calendar替代,更换控制使用. 简单使用jquery的datepicker示例: <!doctype html> <html lan ...

  3. JavaScript中的变量及数据类型

    转自:http://blog.csdn.net/mygis2005/article/details/7375419 JavaScript是一种弱类型的语言,变量名.操作符和方法名都区分大小写. 1.变 ...

  4. 修改nginx的访问目录以及遇到的403错误修改总结

    对于这个问题困扰了我好几天,前篇文章介绍了图片服务器的使用,但是两个服务器如何进行通话访问呢,即如何通过nginx来访问ftp服务器上的资源文件呢,这里面需要修改nginx的配置文件(vi /usr/ ...

  5. Javascript 与正则表达式

    一.正则表达式(regular expression简称res) 二.元字符及其在正则表达式上下文中的行为 三.正则表达式的常用方法 四.与正则表达式有关的字符串对象的方法 五.常用的正则表达式的操作 ...

  6. 获取List集合中最大值的方法

    public static void main(String args[])      {        //Double[] num = { 45.1,45.2 };              Li ...

  7. js网页如何获取手机屏幕宽度

    function a(){"屏幕宽高为:"+screen.width+"*"+screen.height:}其它:网页可见区域宽:document.body.c ...

  8. ubuntu rhythmbox乱码解决方法

    因为安装的是双系统,所以音乐文件在win的盘下面,所以采用的方法是 1. 首先,需要有软件包mid3iconv.如果你的系统中没有安装它,可以通过如下代码自动安装:sudo apt-get insta ...

  9. Using Flash Builder with Flash Professional

    http://help.adobe.com/en_US/flashbuilder/using/WSc5cd04c102ae3e97-6e5d439512e1414e588-8000.html

  10. cannot start session without errors

    访问phpmyadmin出现如标题错误,解决方案如下: cd /var/lib/php 更改目录权限chown nginx:nginx -R session/ That's All!