【三个概念】
1.表达式:
由运算符、变量和常量组成的具有一个确定结果(值)的一个式子。
-->算术表达式:如 x + 5 * y
-->关系表达式:如 x >= 5, x == 8
-->逻辑表达式:与、或、非,&& || ~
-->赋值表达式:如 x = y +7
-->条件表达式:如 x > y ? 1 : 0
-->逗号表达式:有逗号运算符的表达式
求解表达式:①混合运算规则;②优先级规则;③ 结合性规则。
2.语句:
指的是当程序运行时执行某个动作的语法结构。它改变变量的值,产生输出,或处理输入。C语言包括4类语句:
-->表达式语句:末尾加上分号,expression;如,函数调用语句和赋值语句
-->语句块:由大括号{}括起来的一系列语句
-->空语句:只有一个分号
-->控制语句:3类,循环语句,选择/条件语句,特殊语句(return,continue,break)
3.算术运算:
二元算术运算符:加减乘除取模,+ - / * %
一元算术运算符: + -,强调数的正负
【整形升级】
也称类型提升,是指:
char, shaort int或者int型位段(bit-field),包括它们的有符号或无符号变型,以及枚举类型,可以使用在int或unsigned int的[!表达式!]]中。
如果int可以完整表示源类型的所有值,那么该源类型的值就转换为int,否则转换为unsigned int。
【寻常算术转换】
当执行[!算术运算!]时,操作数的类型如果不同,就会发生转换。
规则:
①若其中一个是long double类型,另一个也被转换成long double;
②若其中一个是double类型,另一个也被转换成double;
③若其中一个是float类型,另一个也被转换成float。
若不满足上述三条,则两个数进行整型升级:
①若其中一个是unsigned long int类型,另一个也被转换成unsigned long int;
②若其中一个是long int类型,另一个是unsigned int,
如果long int能够完整表示unsigned int的所有值,那么unsigned int转换为long int,
如果long int不能够完全表示unsigned int所有值,那么两个操作数都被转换成unsigned int。
③若其中一个是 long int 类型,另一个也被转换成long doublelong int;
④若其中一个是 unsigned int 类型,另一个也被转换成unsigned int;
⑤若以上四条都不满足,则两个数都转换成 int。
【K&R C和ANSI C区别】
K&R C:无符号保留原则,当一个无符号类型与int或更小的整型混合使用时,结果类型是无符号类型。
ANSI C:值保留原则,操作数类型不同就进行转换,朝着浮点精度更高,长度更长的方向转换。
【总结】
通常情况下,在对int类型的数值作运算时,CPU的运算速度是最快的。在x86上,32位算术运算的速度比16位算术运算的速度快一倍。
C语言是一个注重效率的语言,所以它会作整型提升,使得程序的运行速度尽可能地快。
因此,你必须记住整型提升规则,以免发生一些整型溢出的问题。