2.运算符和表达式
算术运算
赋值运算
逗号运算
算术运算:
+
-
* //区分数学上符号 和 c语言中的符号
/
注:
1.除数不能为 0
2.两个整型数相除,结果相当于整除
% 取余
注:
1.操作2 不能是 0 //除数不能为 0
eg:
1.判断奇数 偶数?
%2 ==> 1 奇数
0 偶数
2.%N
结果
[0,N-1]
3. 求余的符号 (正负)
取决于 左操作数
强制类型转换:
可以强制转换某些数据的类型
(类型)运算数 //将运算数对应的类型 强转 成 括号中的类型
注意:
强制类型转换,对运算数本身不会产生影响
++: //自增运算 每次加1
++i //先++ ,后用
i++ //先用,后++
//注:
1. 先加后用,或者是先用后加,这个规则,只有在参与到别的运算中时,发挥作者用。
2. 单独使用时,前置加加 和 后置加加,效果是一样的。
3. 运算数,必须是个左值
(const int a;//这里的a本身是左值,但是不能做++a,a++,原因是const修饰后,a成了只读变量)
左值:
int a;
a = 10; // 能放在 = 左边的值,叫做左值 --- 变量
右值:
只能放在等号右边 --- 常量
现在左值 和 右值:
能被定位到的 左值 --- 变量
不能被定位到的右值 --- 常量 及 表达式
运算符优先级和结合性:
1.优先级
一定是先结合的
优先级使用,是在不同级别的运算符混合运算时
i++-3 => (i++)-3
2.结合性
同一优先级
1+2-3
-- //自减运算 每次减一
注意:
1.编译时错误,因为编译器只做语法检查 -- 主要是语法问题
2.运行时错误,逻辑问题 -- 检查自己的思路逻辑
注意:
printf("%d, %d\n" ,i,i++); //因为 i ++ ,++i 这个 自增改变的时间点,没有明确规定
总之,不要写出别人看不懂的、也不知道系统会怎样执行的程序。
赋值运算符:
=
int a;
a = 10 //赋值运算
int a = 10; //这个一般不当作赋值运算,只当作是初始化
int a,b,c;
a=b=c=1
a=b=(c=1)
c=1 //赋值运算表达式
//结果就是c中获得到的值
不同精度类型间的混合赋值
//长类型 <=>短类型
//整型
1. 长类型=>短类型 此时 高位截断
2. 短类型=>长类型
有符号 短类型 则 作符号位扩展
无符号 短类型 则 高位 补0
3. 浮点数 给到 整型变量中 ,此时 精度丢失(小数丢失)
逗号运算:
,
连接多个表达式
表达式1,表达式2, ... ,表达式n
运算规则:
顺序求值运算
依次,求解表达式1到n
逗号表达式的结果是: 最后一个表达式求值的结果