轻松掌握操作符,常用操作符的应用分析

这篇博客主要是对C语言中的一些操作符进行讲解和其应用的分析。

目录

移位操作符

位操作符

逻辑操作符

逗号表达式

条件操作符

关于表达式求值的顺序


移位操作符

移位操作符有2种:

左移操作符 <<

右移操作符 >>

提示:移位操作符,移的是二进制位,即对补码进行移动操作。

应用分析:

左移操作符的移动规则:

左边抛弃,右边补0

右移操作符的移动规则:

右移运算有2种,①逻辑移位 ②算术移位

①逻辑移位:右边抛弃,左边补0

②算术移位:右边抛弃,左边补符号位

位操作符

按位与 &

按位或 |

按位异或 ^

提示:位操作符的操作数必须是整数,也是对补码进行位运算的。

应用分析:

按位与 &

全1为1,有0则0。(2个数同时为1的位才为1,一旦有1个是0则是0)

按位或 | 

有1为1,全0才为0。(2个数只要有1个是1则为1,同时为0才为0)

按位异或 ^

相同为0,相异为1.(2个数相同为0,不同为1)

例:求一个整数在内存中的二进制中的1的个数

int main()
{
	int num = -1;
	int count = 0;
	int i = 0;
	for (i = 0;i < 32;i++)
	{
		if ((num >> i) & 1)
			count++;
	}
	printf("%d\n", count);
	return 0;
}

实际上这里有种更简单的方法,可以大大提高效率

(每次与自己-1进行按位与操作,这样有几个1就进行几次运算)

​​int main()
{
	int num = -1;
	int count = 0;
	while (num)
	{
		num = num & (num - 1);
		count++;
	}
	printf("%d\n", count);
	return 0;
}

逻辑操作符

逻辑与 &&

逻辑或 ||

逻辑非 !

提示:逻辑操作符,只关注“真”和“假”。

应用分析:

我们先来看一道题

int main()
{
	
	int a = 0;
	int b = 1;
	int c = 2;
	int d = 3;
	int i = a++ && b++ && ++c && d++;
	printf("i=%d a=%d b=%d c=%d d=%d", i, a, b, c, d);
	return 0;
}

这道题的结果是:i = 0, a = 1, b = 1, c= 2, d = 3。

对于逻辑与这个操作符,只要前面有一个条件为假,那么将不进行后面的运算。

对于逻辑或则是同理,只要前面有一个条件是真,那么将不进行后面的运算。

逗号表达式

exp1, exp2, exp3, ...expN

提示:逗号表达式的结果,是最后一个表达式的结果。该表达式是从左向右依次执行。

应用分析:

int a = 1;

int b = 2;

int c = ( a = a+b, a++, a<b, b);

c的值是什么?

c的值是 2,即c的值等于b,也就是该逗号表达式中的最后一个表达式的结果

条件操作符

exp1 ? exp2 : exp3

应用分析:

求2个数的较大值

int main()
{
	int a = 10;
	int b = 20;
	int Max = (a > b) ? (a) : (b);
	printf("%d\n", Max);
	return 0;
}

关于表达式求值的顺序

1. 操作符的优先级

2. 操作符的结合性

3. 操作符是否控制求值顺序

(2个相邻的操作符,先比较他们的优先级高低,如果优先级相同,那么在比较他们的结合性)

猜你喜欢

转载自blog.csdn.net/weixin_51696091/article/details/113274079