第二讲:(二)操作符

操作符有单目操作符、双目操作符和三目操作符。
1. 单目操作符:只操作一个数据的叫单目操作符。
2. 双目操作符:操作两个数据的叫做双目操作符。
3. 三目操作符:操作三个数据的叫做三木操作符。

算术操作符:+、-、*、/、%

在平常写代码中,经常会用到数据的计算,在C语言中提供了一系列的操作符,其中有一组操作符叫做算数操作符,分别是+-*\%,这些操作符都是双⽬操作符,又叫做运算符。
双目操作符

+-

+-用来计算加法和减法。
+-都是有2个操作数的,位于操作符两端的就是它们的操作数,属于双⽬操作符

#include <stdio.h>
int main()
{
	int a = 2;
	int b = 4;
	int x = a + b;
	int y = a - b;
	printf("%d\n", x);
	printf("%d\n", y);
	return 0;
}

在这里插入图片描述

*

运算符*用来计算乘法。

int main()
{
	int a = 2;
	int b = 5;
	int x = a * b;
	printf("%d\n", x);
	return 0;
}

在这里插入图片描述

除法/

运算符/⽤来完成除法。
除号的两端如果是整数,执⾏的是整数除法,得到的结果也是整数。

#include <stdio.h>
int main()
{
	int a = 2;
	int b = 5;
	int x = b / a;
	printf("%d\n", x);
	return 0;
}

在这里插入图片描述
上面代码中,5除以2在日常生活中,得到的应该是2.5,但是给出的结果却是2,由此可以看出,C 语⾔⾥⾯的整数除法是整除,只会返回整数部分,丢弃⼩数部分,int类型的变量a在进行除法时,得到的结果只会是整数,不可能出现小数的情况,而2恰恰是5除以2的商,因此 ,当我们要得到一个数除以另一个数的商的时候,可以使用此方法。
问题又来了,我们想要得到精确的计算结果,那要如何做呢?
如果希望得到浮点数的结果,两个运算数必须⾄少有⼀个浮点数,这时 C 语⾔就会进⾏浮点数除法。

#include <stdio.h>
int main()
{
	int a =2
	float x = 5.0 / a;
	printf("%f\n", x);
	return 0;
}

在这里插入图片描述
上面示例中,5.0 / 2 表⽰进⾏浮点数除法,得到的结果就是 2.5 。

#include <stdio.h>
int main()
{
	int a = 5;
	a = (a / 20) * 100;
	printf("%f\n", a);
	return 0;
}

上面代码中,你可能以为a的结果会等于25,实际上a的值最后输出是0。
在这里插入图片描述
这是因为a被定义为整型数值,那么计算机在计算a / 20是整除结果是0,乘以100结果自然就是0了。
为了得到预想的结果,我们把a定义为float类型,让整除变成浮点数除法。

#include <stdio.h>
int main()
{
	float a = 5;
	a = (a / 20) * 100;
	printf("%f\n", a);
	return 0;
}

在这里插入图片描述

求模%

运算符 % 表⽰求模运算,即返回两个整数相除的余值。这个运算符只能⽤于整数,不能⽤于浮点数。

int main()
{
	int a = 5;
	int b = 2;
	int c = a % b;
	printf("%d\n", c);
	return 0;
}

在这里插入图片描述
负数求模的规则是,结果的正负号由第⼀个运算数的正负号决定。

#include <stdio.h>
int main()
{
	printf("%d\n", 11 % -5); //1
	printf("%d\n", -11 % -5); //-1
	printf("%d\n", -11 % 5); //-1
	return 0;
}

在这里插入图片描述
上⾯⽰例中,第⼀个运算数的正负号( 11 或 -11 )决定了结果的正负号。

赋值操作符:赋值=和复合赋值

我们前面讲过,在变量创建的时候给⼀个初始值叫初始化,在变量创建好后,再给⼀个值,这叫赋值。

1	int a = 1;//初始化整数型变量a的值为1
2 	float b = 2.0;//初始化浮点型变量b的值为2.0
3 	char c = 't';//初始化字符型变量c的值为‘t’

赋值操作符 =是⼀个随时可以给变量赋值的操作符。

连续赋值

赋值操作符也可以连续赋值,如:

int main()
{
	int a = 4;
	int b = 3;
	int c = 0;
	c = b = a + 5;//连续赋值,从右向左依次赋值的。
	printf("a=%d\n", a);
	printf("b=%d\n", b);
	printf("c=%d\n", c);
	return 0;
}

在这里插入图片描述
上面看出,b被初始化为4,c被初始化为0,在执行连续赋值以后,b和c的值都被赋值为a+5即9。
C语⾔虽然⽀持这种连续赋值,但是写出的代码不容易理解,建议还是拆开来写,这样⽅便观察代码的
执⾏细节。

	int a = 4;
	int b = 3;
	int c = 0;
	b = a + 5;
	c = b;

这样写更容易代码的阅读和理解。

复合赋值符

在写代码时,我们经常可能对⼀个数进⾏⾃增、⾃减的操作,如下代码:

1	int a = 2;
2	a = a + 3;
3	a = a - 1;

这样代码C语⾔给提供了更加⽅便的写法:

1	int a = 2;
2	a += 3;
3	a -= 1;

C语⾔中提供了复合赋值符,⽅便我们编写代码,这些赋值符有:

1 += -=
2 *= /= %=
3 //下面的操作符后期讲解
4 >>= <<=
5 &= |= ^=

单目操作符: + + - - + -

+ +- -

+ +是⼀种⾃增的操作符,⼜分为前置 + +和后置 + +- -是⼀种⾃减的操作符,也分为前置- -和后置- -

前置 + +

前置 + +顾名思义,就是先自加,在赋值。如下显示:

#include <stdio.h>
int main()
{
	int a = 10;
	int b = ++a;
	printf("a=%d\nb=%d", a, b);
	return 0;
}

在这里插入图片描述
上述代码中,a被初始化为10,b被初始化为++a,它实际的运行方式a先进行自身的加法,然后在赋值给b。即下图所示:

#include <stdio.h>
int main()
{
	int a = 10;
	a = a + 1;
	int b = a;
	printf("a=%d\nb=%d", a, b);
	return 0;
}

计算口诀:先+1,后使⽤。

后置+ +

而后置+ +则是先赋值,在计算。

#include <stdio.h>
int main()
{
	int a = 10;
	int b = a++;
	printf("a=%d\nb=%d", a, b);
	return 0;
}

在这里插入图片描述
这里不难看出,a的初始值为10,但是输出时为11,而b的值却是a的初始值。可以理解为:

#include <stdio.h>
int main()
{
	int a = 10;
	int b = a;
	a = a + 1;
	printf("a=%d\nb=%d", a, b);
	return 0;
}

计算口诀:先使⽤,后+1。

前置- -

如果理解了前置+ +和 后置+ +,那前置- -是同理的,只是把加1,换成了减1;

#include <stdio.h>
int main()
{
	int a = 10;
	int b = --a;
	printf("a=%d\nb=%d", a, b);
	return 0;
}

在这里插入图片描述

后置- -

同理后置- -等同于后置置++,只是吧+1换成了-1。

#include <stdio.h>
int main()
{
	int a = 10;
	int b = a--;
	printf("a=%d\nb=%d", a, b);
	return 0;
}

在这里插入图片描述

+-

这⾥的+是正号,-是负号,都是单⽬操作符。
运算符 + 对正负值没有影响,是⼀个完全可以省略的运算符,但是写了也不会报错。

int a = +10; 等价于 int a = 10;

运算符- ⽤来改变⼀个值的正负号,负数的前⾯加上 -就会得到正数,正数的前⾯加上- 会得到负
数。

#include <stdio.h>
int main()
{
	int a = +10;
	int b = -11;
	printf("a=%d\nb=%d\n", a, b);
	b = -b;
	printf("a=%d\nb=%d", a, b);
	return 0;
}

强制类型转换

在操作符中还有⼀种特殊的操作符是强制类型转换,语法形式很简单,形式如下:

1 (类型)

看代码理解它的意思:

1 int a = 3.1415926;

变量a是int类型,但是赋给它的值却是小数3.1415926,此时运行此代码编译器会报错。
为了消除这个警告,我们可以使⽤强制类型转换:

1 int a = (int)3.1415926;

这个代码的意思就是把3.1415926强制性转换为int类型,这种强制类型转换只取整数部分。

#include <stdio.h>
int main()
{
	int a = (int)3.1415926;
	printf("a=%d", a);
	return 0;
}

在这里插入图片描述
俗话说,强扭的⽠不甜,我们使⽤强制类型转换都是万不得已的时候使⽤,如果不需要强制类型转化就能实现代码,这样⾃然更好的。
本博客只为学习使用,如有错误请大家指出,感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值