C语言运算符和操作符

C语言加减乘除
C语言中的运算符号与数学中的略有不同,请见下表。
在这里插入图片描述
注:除法的说明
C语言中的除法运算有点奇怪,不同类型的除数和被除数会导致不同类型的运算结果:
当除数和被除数都是整数时,运算结果也是整数;如果不能整除,那么就直接丢掉小数部分,只保留整数部分,这跟将小数赋值给整数类型是一个道理。
除数或被除数中有一个是小数,那么运算结果将也是小数
并且是 double 类型的小数。

int main()
{
	int a = 100;
	int b = 12;
	float c = 12.0;

	double m = a / b;
	double n = a / c;

	printf("m=%lf, n=%lf\n", m, n);
	system("pause");
	return 0;
}

输出结果:m=8.000000, n=8.333333
另外除数不能为 0,因为任何一个数字除以 0 都没有意义。然而,编译器对这个错误一般无能为力,很多情况下,编译器在编译阶段根本无法计算出除数的值,不能进行有效预测,“除数为 0”这个错误只能等到程序运行后才能发现,而程序一旦在运行阶段出现任何错误,只能有一个结果,那就是崩溃,并被操作系统终止运行。

int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	scanf("%d%d", &a, &b);
	c = a / b;
	printf("%d", c);
	system("pause");
	return 0;
}

如果在输入时,让b=0,则会崩溃!
注:取余运算的说明
取余,也就是求余数,使用的运算符是 %。C语言中的取余运算只能针对整数,也就是说,% 的两边都必须是整数,不能出现小数,否则编译器会报错,另外余数可以是正数也可以是负数,由 % 左边的整数决定:``
如果 % 左边是正数,那么余数也是正数;
如果 % 左边是负数,那么余数也是负数。

int main()
{
	printf("100%%12=%d \n100%%-12=%d \n-100%%12=%d \n-100%%-12=%d \n",
		     100 % 12, 100 % -12, -100 % 12, -100 % -12);
	system("pause");
	return 0;
}

在这里插入图片描述
*

自增和自减

a++,++a。
这种写法叫做自加或自增,意思很明确,就是每次自身加 1。相应的,也有a–和–a,它们叫做自减,表示自身减 1。
++和–分别称为自增运算符和自减运算符,它们在循环结构中使用很频繁。
自增和自减的示例:

int main()
{
	int a = 5, b = 10;
	printf("a=%d, b=%d\n", a, b);
	++a;
	--b;
	printf("a=%d, b=%d\n", a, b);
	a++;
	b--;
	printf("a=%d, b=%d\n", a, b);
	system("pause");
	return 0;

输出结果为:a=5,b=10
a=6,b=9
a=7,b=8
自增自减的结果必须得有变量来接收,所以自增自减只能针对变量,不能针对数字,例如5++是错误的。
前置(++)和后置(++)的区别:
++ 在前面叫做前自增(例如 ++a)。前自增先进行自增运算,再进行其他操作。
++ 在后面叫做后自增(例如 a++)。后自增先进行其他操作,再进行自增运算。

int main()
{
	int a = 10;
	int b = 0;
	printf("a=%d", a++);
	b = a;
	printf("b=%d", b);
	system("pause");
	return  0;
}

输出结果 a=10,b=11.

int main()
{
	int a = 10;
	int b = 0;
	printf("a=%d", ++a);
	b = a;
	printf("b=%d", b);
	system("pause");
	return  0;
}

输出结果 a=11,b=11.

b=a++;这个语句执行过程
因为++的优先级高于=,因此先执行++运算符,但对于后置++,程序首先会生成一个临时变量。将a本身先存放在临时变量中,然后对a进行++,最后将临时变量的值赋给 b。

b = a++;
temp = a;
a=a+1;
b = temp;

对于自减和自加基本是一样的,就不必详细介绍了。

移位操作符

左移操作符 <<
右移操作符 >>
左移规则:左边抛弃,右边补零
在这里插入图片描述

扫描二维码关注公众号,回复: 4130250 查看本文章
int main()
{
	int num = 10;
	printf("%d\n",num << 1);
	printf("%d\n", num);
	system("pause");
	return 0;
}

输出结果 20
10
**右移规则:**右移分为逻辑右移,算术右移。
逻辑右移:右边抛弃,左边补零
算术右移:右边抛弃 ,左边按符号位进行补充
在这里插入图片描述
**关系运算符
**关系运算符:
>
>=
==
<=
<
!=
关系表达式的运算结果只能是0或1,。
注意:=和==的区别
逻辑操作符:逻辑与(&&)逻辑或(||)
1&&1=1 1&&0=0 0&&0=0
1||1=1 0||1=1 0||0=0
三目操作符:exp1?exp1:exp2

max = a > b ? a : b;
if (a > b)
	{
		max = a;
	}
	else
	{
		max = b;
   `}

两段代码的功能是等价的,但三木运算符更方便。

猜你喜欢

转载自blog.csdn.net/weixin_43213517/article/details/83217863