1.注释符号
编译器在编译时删除注释,但是以空格替换注释。
2.接续符
编译器会自动将\去除,将下一行提到后方。
可用于宏定义:
3.||与&&
||:从左往右运算当遇到条件为真,则停止运算(后续计算将不执行);
&&:从左往右运算当遇到条件为假,则停止运算(后续计算将不执行);
4.!
!:只认0;(!0 -> 1 !-100 -> 0)
5.(a?b:c)
a得值为真,返回b的值;否则返回c的值; *(a<b?&a,&b)
6.<<与>>
<<:高位丢弃,低位补0;
>>:高位补符号位,低位丢弃。
^: 3^3=0
7.++与--
1) int i = 3; (++i)+(++i)+(++i) --> 18 (6+6+6) or 16 ((5+5)+6) 【编译器决定】
2) int i = 3; k = (++i,i++,i+10); 逗号-->从左至右运算,最后一个表达式的值就是结果(4,5,5+10) k=15
3) 贪心法:编译器从左至右一个一个尽可能多的读入字符,读到字符不可能与已读字符组成合法字符为止;
++i+++i+++i; 编译器先读到 ++i + ? --> ++i + + 编译器不读了先运算 1++ (就错了);
这和a = i/*p; --->编译器会认为 /* 为注释;(可以改为:a = i / *p ->在/*之间加空格)
8.优先级和类型转换
9.隐式类型转换
1)算术运算式中,低类型转换为高类型
2)赋值表达式中,表达式的值转换为左边变量的类型
3)函数调用时,实参转换为形参的类型
4)函数返回值,return表达式转换为返回值类型
int i = -2; unsigned int j = 1;
if((i+j)>0) --->i+j 结果转换为unsigned int类型
print(“%d\n”,i+j); ---->%d代表int 类型; i+j 为unsigned int
(printf(“%0X\n”,i+j)) 打印0x十六进制--->为FFFFFFFF为-1.