第5章 运算符、表达式和语句
主要介绍了运算符。
也提了一下循环和参数,后面的章节有详细介绍。
运算符小结:
赋值运算符 :=
算术运算符: + 、 -、 *、 /、% 、-(负号) ++ (自增)、--(自减)
其他运算符:sizeof 求变量字节数。用法 sizeof(float) sizeof mice
(type) 类型转换。 用法 int x = (int) 1.26;
5.1 循环简介(略)
5.2 基本运算符(operator)
C用运算符(operator)表示算术运算。
5.2.1 赋值运算符: = (初学时易混淆)
在C语言中,= 不表示相等,而是赋值。
如: i = i+1 表示把i+1的值 赋值给变量i
如果出现多重赋值: c = b = a = 12; 赋值的顺序是从右往左,先把12赋值给a,然后赋值给b
几个概念:
数据对象(data object):用于储存值的数据存储区域。
左值(lvalue) :用于标识和定位存储位置的标签。
右值(rvalue): 能赋值给可修改左值的量。
5.2.2 加法运算符:+
5.2.3 减法运算符:-
5.2.4 符号运算符:- 和+ // +为(C99)新增,然而似乎+符号并没有什么用,它不会改变运算对象的符号。
5.2.5 乘法运算符 :*
5.2.6 除法运算符:/
注意整数除法的小数部分会被丢弃(而不是四舍五入),如5/3 = 1。有浮点数的除法会有小数部分。
5.2.7 运算符优先级
5.2.8 优先级和求值顺序
优先级高的先算,(优先级)相同的按照结合律
由于()优先级最高,我们只要把想先计算的用() 括起来就行了。
5.3 其他运算符
5.3.1 sizeof运算符和size_t 类型
sizeof运算符:以字节为单位返回运算对象的大小
用法 sizeof (int); sizeof n; //类型必须加() ,变量()可以不加
sizeof返回值是一个 size_t 类型的值, 可使用%zd或%u显示size_t类型的值
//size_t 是一个无符号整数类型 ,是用typedef给无符号整数起的别名。
5.3.2 求模运算符: %
(只能)用于整数运算,取余数 (左边除以右边的余数)。
13%5 = 3
5.3.3 递增运算符++
a++; 相当于 a= a+1;
有两种形式前缀++a和后缀a++。
5.3.4 递减运算符--
5.3.5 优先级
++、--优先级较高,只低于()
5.3.6不要自作聪明
不要使用++ --的情形:
1.一个变量出现在一个函数的多个参数中
2.多次出现在一个表达式中
5.4 表达式和语句
5.4.1 表达式
表达式 (expression)由 运算符和运算对象组成。
例如:
4
4+2
q = 5
q > 3
......
每个表达式都有一个值
5.4.2 语句
语句(statement)是C程序的基本构建模块,
大多数语句都以 ; 结尾。
副作用和表达式 //可帮助理解执行顺序,看不懂就跳过。
副作用(side effect)是对数据对象或文件的修改
states = 50;
的副作用是让state的值为50。 从C语言的角度看,主要目的是对表达式求值,而赋值表达式的副作用是让变量的值改变。
序列点(sequence point)是程序执行的点。 在该点上,所有副作用都在进入下一步之前发生。
在C语言中,分号标记一个序列点。一个完整表达式的结束也是一个序列点。
完整表达式指的是这个表达式不是另一个表达式的子表达式。
5.4.3 复合语句(块)
复合语句块是花括号{}括起来的多条语句。
5.5类型转换
当类型不匹配时,C语言会自动进行基本的类型转换。
5.5.1 强制类型转换
通常应该避免自动类型转换。使用强制类型转换可以主动将某个量转换成目标类型。
使用强制类型转换符: (type )
举例:mice = (int)1.6 + (int)1.7;