第五章 运算符、表达式和语句——《C Primer Plus》笔

2022-08-29  本文已影响0人  One2INF

第五章 运算符、表达式和语句

5.1 循环简介

5.2 基本运算符

赋值运算符:=

数据对象:用于存储值的数据存储区域。

左值:用于标识特定数据对象的名称或表达式。

数据指实际的数据存储;左值指用于标识或定位存储位置的标签。

右值:能复制给可修改左值的量,且本身不是左值。(既不是某个存储位置的标签)

加法运算符:+

减法运算符:-

符号运算符:- 和 +

乘法运算符:*

除法运算符:/

运算符优先级(从低到高)

运算符 结合律
() 从左往右
+ -(一元) 从右往左
* / 从左往右
+ -(二元) 从左往右
= 从右往左

5.3 其他运算符

sizeof 运算符

运算对象可以是具体的数据对象(如,变量名)或类型。如果运算对象是类型(如,float),则必须用圆括号将其括起来。

求模运算符:%

递增运算符:++

有前缀,后缀形式。

递减运算符:--

5.4 表达式和语句

表达式:由运算符和运算对象组成,每个表达式都有一个值。如:

4

-6

a*(b + c/d)/20

语句:C 程序的基本构建块。一条语句相当于一条完整的计算机指令。大部分语句都以分号结尾。

注:声明不是表达式语句。

5.5 类型转换

当数据类型不匹配时就会发生类型转换。

  1. 当类型转换出现在表达式时,无论是 unsigned 还是 signedcharshort 都会被自动转换成 int,如有必要会被转换成unsigned int(如果 shortint 的大小相同,unsigned short 就比 int 大。这种情况下,unsigned short 会被转换成 unsigned int)。由于都是从较小类型转换为较大类型,所以这些转换被称为升级(promotion)。

  2. 涉及两种类型的运算,两个值会被分别转换成两种类型的更高级别。

  3. 类型的级别从高至低依次是 long doubledoublefloatunsigned long longlong long

    unsigned longlongunsigned intint。例外的情况是,当 longint 的大小相同时,unsigned intlong 的级别高。之所以 shortchar 类型没有列出,是因为它们己经被升级到 intunsigned int

  4. 在赋值表达式语句中,计算的最终结果会被转换成被赋值变量的类型。这个过程可能导致类型升级或降级(demotion)。所谓降级,是指把一种类型转换成更低级别的类型。

  5. 当作为函数参数传递时,charshort 被转换成 intfloat 转换成 double。第 9章将介绍,函数原型会覆盖自动升级。

类型降级规则如下:

  1. 目标类型是无符号整型,且待赋的值是整数时,额外的位将被忽略。例如,如果目标类型是 8unsigned char,待赋的值是原始值求模 256

  2. 如果目标类型是一个有符号整型,且待赋的值是整数,结果因实现而异。

  3. 如果目标类型是一个整型,且待赋的值是浮点数,该行为是未定义的。

5.6 带参数的函数

形参:函数声明的参数。

实参:实际传递的参数。

5.7 示例程序

上一篇下一篇

猜你喜欢

热点阅读