一、算术运算符
① 加 :+
② 减 :-
③ 乘 :*
④ 除 :/
● 被除数与除数都是int类型——>商是int类型,商有小数部分,就把小数部分截去
● C语言整形的除法的结果需要取整,例如5 / 3 = 1。
● C语言中的取整方式是向零取整(向坐标轴0的方向,取最近的整数。)
● C语言中计算-5除以3,因为实数结果约为-1.67,向零取整,得到结果为-1
16 / 5 = 3.2
-13 / 4 = -3
13 / 4 = 3
3 / 5 = 0
5 / 3 =1
● 被除数与除数只要有一个或两个是浮点型数据——>商是浮点型数据,不截去小数部分
16 / 5.0 = 3.20000
⑤ 取余数 :%
● 规定被除数、除数都要为整数。
● 余数符号只与被除数有关
二、关系运算符
① 大于>:
② 大于等于>=:
③ 小于等于<=:
④ 不等于!=:
⑤ 等于==:
三、逻辑运算符
C语言对真假的处理:非零是真、零是假
① 非!
② 且&&:左边的表达式为假,右边的表达式肯定不会执行
③ 或||:左边的表达式为真,右边的表达式肯定不会执行
四、赋值运算符
① =
② +=
③ *=
④ /=
⑤ -=
五、优先级别
算术 > 关系 > 逻辑 > 赋值
六、自增自减
(一)自增 / 自减分类:
在【流程控制for:●i++和++i的区别】里也有提到
《1》前自增:++ i:最终都使 i 的值 +1
前自增整体表达式的值是 i + 1 之后的值
《2》后自增:i ++:最终都使 i 的值 +1
后自增整体表达式的值是 i + 1 之前的值
/*
时间:2020年1月
编辑人:pinkowonote
功能:
目的:运算符——自增 / 自减
*/
# include <stdio.h>
int main(void)
{
int i;
int j;
int k;
int m;
i = j = 3;
k = i++;
m = ++j;
printf("i = %d, j = %d, k=%d, m = %d\n",i, j, k, m);
return 0;
}
/*
在VS_2013中输出结果是:
--------------------------------
i = 4, j = 4, k=3, m = 4
--------------------------------
总结:
*/
《3》为什么会出现自增 / 自减表达式?i += 1、i = i + 1就已经满足,为什么要把 i ++ 设计出来?
● i += 1、i = i + 1:先把内存中 i 的值取出,在CPU的寄存器里使 i + 1,然后再把 i + 1赋值给 i 这个变量
● i++:直接放在CPU的寄存器【CPU内部存储数据的单元】里来进行处理
①代码更精炼
②自增速度更快
《4》代码规范的原则:
① 编成时尽量屏蔽掉前自增和后自增的差别
② 自增表达式:i++和++i,单独成一个语句,不要把它作为【更大表达式 / 一个完整复合语句】的一部分来使用
eg1:就是不能写 int x = i++ + ++i + i + i++
这样写不但是不规范的代码,而且是不可移植的代码。因为在不同的机器上,不知道 i++ 后执行 ++i的时候,i++ 到底有没有立即 +1。这点是不够明确的,只有存在【顺序点】才能明确是否执行完成
● 顺序点:【,】【(一个完整的表达式)】【;】
i++,++i:i++在【,】之后的语句执行之前 都立即生效
+不是一个顺序点
eg2:printf(“%d %d”,i++,++i,i);
eg3:int x = i++;
七、三目运算符
● int i = 3 > 2 ? 5 : 6;
● A ?B:C
等价于
if (A)
B;
else
C;
/*
时间:2020年1月
编辑人:pinkowonote
功能:
目的:三目运算符
*/
# include <stdio.h>
int main(void)
{
int i;
i = (3 > 2 ? 5 : 1);
printf("%d\n",i);
return 0;
}
/*
在VS_2013中输出结果是:
--------------------------------
5
--------------------------------
总结:
*/
八、逗号表达式
《1》格式:
(A, B, C, D)
《2》功能:
从左到右执行
最终表达式的值是最后一项的值
/*
时间:2020年1月
编辑人:pinkowonote
功能:
目的:逗号表达式
*/
# include <stdio.h>
int main(void)
{
int i;
int j = 2;
/*j = 3、j = 4、表达式 = 6(j = 4)、表达式 = 1(j = 4)*/
i = (j++, ++j, j + 2, j - 3);
printf("%d\n",i);
return 0;
}
/*
在VS_2013中输出结果是:
--------------------------------
1
--------------------------------
总结:最终表达式(i)的值是最后一项(j - 3)的值
*/