左结合:从左至右依次运算。例如算术运算符+、-,表达式a - b + c,先计算a - b,再用结果与c运算
右结合:从右至左依次运算。例如赋值运算符=,表达式a = b = c,先计算b = c,再将结果赋给a
复制代码
C语言中的运算符是有结合性的,运算符的结合性指的是多个优先级相同的运算符出现在同一个表达式中,优先执行哪个运算符
运算符的结合性分为两种:一种是左结合性,遵循先左后右原则,比如 a + b - c,相称于(a+b)-c,另一种是右结合性,遵循先右后左原则,比如双目运算符中的赋值运算符 = ,比如表达式a=b=c,相称于a=(b=c) 注意:C语言中的单目运算符和三目运算符都是遵循右结合性,固然也包罗双目运算符中的赋值运算符=,其他的运算符都遵循左结合性
另外,虽然sizeof运算符中的表达式不会被运算,但是假如sizeof表达式中出现多个数据类型的巨细盘算,这个时候会涉及到C语言根本数据类型的转换,转换的意思指的是将数据(变量、数值、表达式的结果等)从一种类型转换为另一种类型
一般程序中的数据类型转换分为两种环境:自动类型转换 or 强制类型转换。两者区别如下:
自动类型转换
自动类型转换就是编译器默默地、隐式地举行的数据类型转换,这种转换不需要程序员干预,会自动发生。比如将一种类型的数据赋值给另外一种类型的变量时就会发生自动类型转换
在赋值运算中,赋值号两边的数据类型差别时,需要把右边表达式的类型转换为左边变量的类型,这可能会导致数据失真,或者精度降低;以是说自动类型转换并不肯定是安全的。对于不安全的类型转换,编译器一般会给出警告
在差别类型的混合运算中,编译器也会自动地转换数据类型,将参与运算的所有数据先转换为同一种类型,然后再举行盘算
转换的规则:转换按数据长度增长的方向举行,以保证数值不失真,或者精度不降低。例如int 和 long 参与运算时,先把 int 类型的数据转成 long 类型后再举行运算。所有的浮点运算都是以双精度举行的,即使运算中只有 float 类型,也要先转换为 double 类型,才气举行运算。另外char 和 short 参与运算时,必须先转换成 int 类型