【知识点1】运算符与表达式
1 运算符
用来进行某种运算的符号
几目运算符:这个运算符需要几个操作数
单目运算符:该运算符带一个操作数
双目运算符:该运算符带两个操作数
三目运算符:该运算符带三个操作数
结合性:这个式子是从右往左还是从左往右运算的
a + b 和 b + a在数学上是一样的 但是在c语言里面含义是不一样的
例如:假设 i = 5
(i++) + i; //12
i + (i++); //11
优先级:谁先运算谁后运算的问题
单目运算符 > 算术运算符 > 关系运算符 > 逻辑运算符 > 条件运算符 >
赋值运算符 > 逗号运算符
有括号先算扩号,没有括号再按优先级走
(1)算术运算符:进行算术的一个运算符
++ --:单目运算符
+ - * / %:双目运算符,结合性是从左算到右
当然乘除大于加减
3 + 5
5 - 2
3 * 4
6 / 4 -> /在这里有两个意思:当操作数都是整数的时候是取整的意思
当操作数是小数的时候就是除以
6.0 / 4 ->这个时候就是除以 结果就是1.5
不一定结果是1.5我们就可以去拿这个1.5
当我们的结果是一个整形的变量去保存的那么直接丢弃小数部分
int a = 6.0 / 4; -> 这个时候只会保留整数部分
%:只有两个操作数都是整数的时候才有意义
取余 -> 求模
上述的运算符:不一定非得全部写整数才可以
(int)6.2 % (int)4.1 ->实际上用的都是整数
c语言里面如果在一个数(变量也可以)前面打一个括号,然后写一个类型
表示将后面的这个数强制转换成这个类型 -> 强转
强转性的问题在后面会看的越来越多,所以现在一定要开始适应
有的时候强制转换可能会和我们想的不一样
float a = 3.1;
int b = (int)a;//如果类型不同是不能进行赋值
b = 3;
int * p = (int *)&a;//还没有讲到指针 这里不需要你们掌握
//我们只需要知道和我们想的可能不一样
*p != 3; ->这个玩意就是一个很奇怪的值
(2)单目运算符:++ --
++ -- 我们有前++ -- 也有后++ --
他们的语义是不一样的
前++ --:算了这个结果之后直接改变这个变量的值
后++ --:算了这个结果之后是先将没有算结果的时候的值返回然后再改这个变量的值 //(重点!!)
int a = 3;
int b = a++; -> 先将a的值返回3 然后再将a的值+1
这个式子之后 b的值为3 a的值为4
int c = ++a; -> 先将a的值自加1,然后再取a的值赋值给c
这个c的值为5,a的值为5
为了让你们更清楚的认识这个++ --;再这里我超一下纲,按c++里面的实现方式给你们讲
c++里面的这个算符运算非常的直接,实际上运算符是用函数实现的
int &function(int &a)//这个相当于是前++ 里面的a就相当于传进来的那个a
{
a += 1;
return a;
}
int function(int &a,int)//这个相当于是后++
{
int b = a;
a += 1;
return b;
}
根据代码显示:前++与后++是存在代码上面的区别的
一个是返回自加之后自己本身的值
一个是返回保存原先的那个值,没有自加之前的那个值
并且前++的效率要高于后++
上述的代码操作c语言里面是有问题的,所以不要尝试
void function(int a,int b,int c,int d,int e)
{
printf("%d %d %d %d %d\n",a,b,c,d,e);
}
int main()
{
int i = 10;
function(i++,i--,i,++i,--i);//函数调用也是一个运算符
//结合性是从右往左
//--i ++i都是拿i的值
//i本身也是拿i的值