1. 转义字符
2.运算符 表达式
算术运算 + - * / % 取余 ++ --
运算符
表达式 由运算符 和 运算数 构成字符序列
1+2 //所有的表达式都是有结果的(值)
//表达式一定是有数据类型的
1+(2*3)
1+(2*3)
3.隐式类型转换
double <---- float int <----char/short
规则:从右向左:必转
从下到上:低精度类型 与 高精度类型混合运算 ,此时 低精度 往 高精度转
4.表达式怎么看?
1)有哪些运算符?
2)运算符的
优先级
结合性
/ 除法
注意:
1.除数不能为0
2.整型数相除 --- 相当于是整除
5.强制类型转换:
(类型)表达式
123.4578
123.4578
问题:
编译时的问题
错误 --- 语法错误
警告 --- 语法不合适
运行时的问题
逻辑问题 --- 调整思维
6.%
注意:
1.浮点型不能做求余运算
2.求余运算 第二操作数 不能是 0
3.求余运算的结果的符号 取决于 左操作数的符号
有啥用?
a.判断奇数偶数?
a%2 ==?
b.a%N 结果 [0~N-1]
抽题的程序?
7.++ //自加
-- //自减
i++ //先用(表达式的结果) 后加 i
++i //先加i,后用 (表达式的结果)
i++ //表达式的结果?
注意:
1. 浮点数也能自增自减
2. ++,--运算数 必须是左值 (变量)
3. 注意 尽量避免
printf("%d%d\n",i,++i);
不要写出这种不确定的代码
4.
op.c: In function ‘main’:
op.c:82:4: error: lvalue required as increment operand
10++;
^~
lvalue (left value) //左值 --- 能放在 = 左边的这些量
int a;
a = 10;
constant // 常量的意思
const
const int a = 10; //a 只读变量 ---只能读 不能修改
左值 (lvalue -- locationable) //可定位的 ---能不能被定位到
&
表达式
匿名变量 //都是右值
8. i+++++i //贪心原则
从左到右逐个字符的扫描表达式,
看这些字符能否,尽可能多的结合成c的运算符
不能结合,就还是字符本身
i+++++i
i ++ ++ + i
i++ ++ +i
(((i++)++) + i)
9.赋值运算:
=
赋值运算表达式的的结果,就是左值获得的值的
int a;
a = 10;
(a=(b=(c=1)))
+=
-=
*= //赋值运算
a += 1 // a = (a + 1)
10.逗号运算: 顺序求值运算符
形式:
表达式1,表达式2, ...,表达式n
逗号表达式的结果:
是最后一个表达式的结果