操作符
1.算术操作符
在写代码的时候一定会涉及到计算,C语言中为了方便运算,提供了一系列操作符,其中有一组操作符叫算术操作符,分别是:+ - * / %,都是双目操作符
注:操作符也被叫做:运算符,是不同的翻译,意思是一样的。
1.1 +和-
+和- 用来完成加法和减法,都是有两个操作数,位于操作符两端的就是他们的操作数,这种操作符也叫双目操作符
#include <stdio.h>
int main()
{
int x = 4+22;
int y = 61-23;
printf("%d\r\n",x);
printf("%d\r\n",y);
return 0;
}
1.2 *
运算符*用来完成乘法
#include <stdio.h>
int main()
{
int num=5;
printf("%d\n",num*num);
return 0;
}
1.3 /
运算符/用来完成除法
除号的两端如果是整数,执行的是整数除法,得到的结果也是整数
#include <sdtio.h>
int main()
{
float x=6/4;
int y =6/4;
printf("%f\n", x); // 输出 1.000000
printf("%d\n", y); // 输出 1
return 0;
}
//示例中,尽管变量x的类型是float浮点数,但是6/4得到的结果是1.0,而不是1.5,原因在于C语言里边的整数除法是整除,只会返回整数部分,丢弃小数部分,如果希望得到浮点数的结果,两个运算数必须至少有一个浮点数,这时C余元就会进行浮点数除法
#include <sdtio.h>
int main()
{
float x=6.0/4;
printf("%f\n", x); // 输出 1.500000
return 0;
}
再看一个例子
#include <sdtio.h>
int main()
{
int score = 5;
score=(score/20)*100;
return 0;
}
//上面的代码,你可能觉得经过运算,score会等于25,实际上score等于0,因为score/20是整除,会得到一个0,
//为了得到一个预想的结果,改变如下
#include <sdtio.h>
int main()
{
int score = 5;
score=(score/20.0)*100;
return 0;
}
1.4 %
运算符%表示求模运算,即返回两个整数相除的余值,这个运算符只能用于整数,不能用于浮点数
#include <sdtio.h>
int main()
{
int x = 6%4 //2
return 0;
}
负数求模的规则是,结果的正负号由第一个运算数的正负号决定
#include <sdtio.h>
int main()
{
printf("%d\n", 11 % -5); // 1
printf("%d\n",-11 % -5); // -1
printf("%d\n",-11 % 5); // -1
return 0;
}
2.赋值操作符
赋值操作符:=和复合赋值
赋值操作符=是一个随时可以给变量赋值的操作符
在变量创建的时候给一个初始值叫初始化,在变量创建好后,再给一个值,叫赋值
int a= 100; //初始化
a=100; //赋值
2.1 连续赋值
赋值操作符可以连续赋值,如:
int a= 3;
int b =5;
int c = 0;
c=b=a+3;//连续赋值,从右向左依次赋值
C语言虽然支持连续赋值,但是写出的代码不容易理解,建议拆开写,方便观察代码的执行细节
int a - 3;
int b =5;
int c =0;
b=a+3;
c=b;
2.2复合赋值
在写代码时,经常对一个数进行自增自减的操作:
int a = 10;
a=a+3;
a=a-2;
//这种代码C语言给了更方便的写法
int a = 10;
a+=3;
a-=2;
C语言中提供了复合赋值符
- +=
- -=
- *=
- /=
- %=
- >>=
- <<=
- &=
- |=
- ^=
3.单目操作符
前边的操作符都是双目操作符,有两个操作数,C语言中还有一些操作符只有一个操作数,被成为单目操作符,++ – +(正)-(负)都是单目操作符
3.1 ++
++是一种自增的操作符,又分为前置++和后置++
前置++
int a=10;
int b =++a; //++的操作数是a,是放在a前面的,就是前置++
printf("a=%d,b=%d\r\n",a,b);
在这里,计算顺序是,先+1再使用,a原来是10,先+1变成了11,再赋值给b,b也是11
int a = 10;
a = a+1;
b = a;
printf("a=%d b=%d\n",a , b);
后置++
int a=10;
int b =a;++ //++的操作数是a,是放在a后面的,就是后置++
printf("a=%d,b=%d\r\n",a,b);
在这里,计算顺序是,先使用再+1,a的值先赋值给b,所以b是10,a原来是10,,+1变成了11
int a = 10;
b = a;
a=a+1
printf("a=%d b=%d\n",a , b);
3.2 –
如果看懂了前置++,那前置--也是同理的,只是把+1变成了-1,即先-1后使用
int a = 10;
int b =--a; //--的操作数是a,是放在a前面的,就是前置--
printf("a=%d,b=%d\r\n",a,b);
后置--,先使用后-1
int a = 10;
int b = a--;*//--**的操作数是**a**,是放在**a**的后⾯的,就是后置**--*
printf("a=%d b=%d\n",a , b);*//**输出的结果是:**9 10*
3.3 +和-
这里的+是正号,-是符号,都是单目操作符
运算符+对正负值没有影响,是一个完全可以省略的运算符,但是写了也不会报错
int a = +10;等价 int a = 10;
运算符- 用来改变一个值的正负号,负数的前面加上-就会得到正数,正数的前面加上-会得到负数
int a = 10;
int b = -a;
int c = -10;
printf("b=%d c=%d\n", b, c);*//**这⾥的**b**和**c**都是**-10*
int a = -10;
int b = -a;
printf("b=%d\n", b); *//**这⾥的**b**是**10*
4.强制类型转换
在操作符中还有一种特殊的操作符是强制类型转换,语法形式很简单
(类型)
int a = 3.14; //a的是int类型, 3.14是double**类型,两边的类型不⼀致,编译器会报警告
为了消除这个警告,我们可以使用强制类型转换
int a = (int)3.14;//意思是将3.14强制类型转换为int**类型,这种强制类型转换只取整数部分
俗话说,强扭的瓜不甜,我们使用强制类型转换都是万不得已的时候使用,如果不需要强制类型转换就可以实现代码是最好的