一、操作符
1.算数操作符中,除了%取模操作符只接受整型操作数之外,+ - * /既可适用浮点类型 又可使用于整型。
2.移位操作符中,算数左移和逻辑左移是相同的,而对于有符号数的右移操作,采用0填充还是符号位是因编译器而异的,因此是不可移植的。移位的位数为无符号整型
3.位操作符的操作数均为整型
4.赋值表达式的值为左操作符的值。getchar()和EOF,整型、字符型存在提升和截短的陷阱。复合型赋值操作符的效率更高
5.当sizeof的操作数是个数组名时,它返回该数组的长度,以字节为单位。sizeof并不会对表达式进行求值
6.自增、自减操作符的结果不是被他们所修改的变量,而是变量值的拷贝
7.关系操作符的结果都是一个整型值,
8.逻辑操作符控制求值顺序,左操作数的值会影响右操作数是否会被求值
9.条件操作符代替简单的if语句,控制求值顺序
10.整个逗号表达式的值为最后那个表达式的值
二、表达式求值
1.左值是一个地址,右值可是左值和常量
2.隐形类型的转换:long double double float unsigned long int long int unsigned int int 如果某个操作数的类型在上面这个列表中排名较低,那么就先将其转换为另一个操作数的类型,字符的运算缺省都是按照int 型运算的
3.复杂表达式的求值顺序是由三个因素决定的:操作符的优先级、操作符的结合性和操作符是否具有控制执行的顺序,相邻的操作符哪个先执行取决于操作符的优先级,如果两者的优先级同,那么他们的执行顺序由他们的结合性决定,结合性就是一串操作符是从左向右执行还是从右向左执行,&& || 条件操作符 逗号操作符可对整个表达式的求值顺序施加控制,他们或者保证某个子表达式能够在另一个子表达式的所有求值过程完成之前进行求值,或者可能使某个表达式被完全跳过不被求值
4.求值顺序