第五章 - 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
  • 当待赋值的值与目标类型不匹配时:
    1. 目标类型为无符号整型,待赋值的值是整数,额外的位会被省略
    2. 目标类型为有符号整型,待赋值是整数,结果因实现而异
    3. 目标类型为整型,待赋值是浮点数,结果未知

强制类型转换

  • 圆括号和括起来的类型名构成了强制类型转换符:(type)