第五章 - DDL-Killer/The-road-of-Linxu-Group2024 GitHub Wiki
运算符、表达式和语句
赋值运算符:=
- =号左边必须是一个变量名
- 赋值表达式语句的目的是把值储存在内存位置上,用于储存值的数据储存区域统称为数据对象
- 赋值的顺序是从右往左
除法运算符:/
- 浮点数除法的结果是浮点数,整数除法的结果是整数
- 整数除法结果的小数部分被丢弃,这个过程被称为截断
- 混合整数和浮点数计算的结果是浮点数——计算机不能用浮点数除以整数,编译器会把两个运算对象转换为相同的类型
运算符优先级
- 除了=是从右往左,+-、()、*/等都是从左往右
- 结合律只适用于共享同一运算对象运算符
sizeof运算符和size_t类型
- sizeof返回size_t类型的值,这是一个无符号整数类型
- size_t是语言定义的标准类型,在使用size_t类型时,编译器会根据不同的系统替换标准类型
- 求模运算符:%
求模运算符用于整数运算,会给出其左侧整数除以右侧整数的余数,只能用于整数,而不能用于浮点数
- 递增运算符:++
- 递减运算符:--
- 递增和递减运算符都有很高的结合优先级,只有圆括号的优先级比它们高
表达式
- 表达式由运算符和运算对象组成
- 最小的表达式是一个单独的运算对象
语句
- 副作用:对数据对象或文件进行修改
- 序列点:程序执行的点,所有的副作用都在进入下一步之前发生,分号标记了一个序列点
复合语句(块)
类型转换
- 当类型转换出现在表达式中,无论是unsigned还是signed的char和short都会被自动转换成int,如果有必要会转换为unsigned int,这种转换被称为升级
- 涉及两种类型的运算,两个值会被分别转换为两种类型的更高级别
- 类型级别从高到低依次是long double,double,float,unsignedlong long,long long,unsigned long,long,unsigned int,int 例外:long与int大小相同的时候,unsigned int比long的级别高
- 在赋值表达式语句中,计算的最终结果会被转换成被赋值变量的类型
- 当作为函数参数传递的时候,char(最低有效字节)和short被转换为int,float被转换成double
- 当待赋值的值与目标类型不匹配时:
- 目标类型为无符号整型,待赋值的值是整数,额外的位会被省略
- 目标类型为有符号整型,待赋值是整数,结果因实现而异
- 目标类型为整型,待赋值是浮点数,结果未知
强制类型转换
- 圆括号和括起来的类型名构成了强制类型转换符:(type)