运算符

226 阅读2分钟

优先级

错误比较法
if(3<i<10)
因为对计算机而言比较发现不满足条件后3<i就变成了0
正确写法
if(3<i && i<10)
算数运算符>关系运算符>&&和||

逻辑运算符

非! 与&& 或||
!优先级高于算术运算符
或||和与&&优先级低于算术运算符

短路运算

&&和||属于逻辑运算符。关于&&和||的表达式的运算规则是这样的:
表达式1 || 表达式2,只要任意表达式为true,则整个表达式的运算结果为true。

表达式1 && 表达式2,只有所有表达式都为true,则整个表达式的运算结果才为true。根据集合的补集的思想,只要任意表达式为false,则整个表达式的运算结果为false。

&&和||的短路运算,是指如果在进行前面的表达式的运算过程,通过判断已经明确的知道整个表达式的结果,那么就不会进行后面表达式的运算判断。例如:

表达式1 || 表达式2 || 表达式3...|| 表达式n,如果表达式1的运算结果为true,则整个表达式的结果为true,同时不会再对后面的表达式2、表达式3到表达式n进行运算判断。如果表达式1的运算结果为false,则根据表达式2的运算结果继续判断。

表达式1 && 表达式2 && 表达式3...&& 表达式n,如果表达式1的运算结果为false,则整个表达式的结果为false,同时不会再对后面的表达式2、表达式3到表达式n进行运算判断。如果表达式1的运算结果为true,则根据表达式2的运算结果继续判断。

原文链接:blog.csdn.net/bulebin/art…

例如

int main()
{
	int year;
	int i;
	i = 0;
	i == 0 && printf("error1\n");
	i = 0;
	i == 1 || printf("error2\n");
	system("pause");
	return 0;
}

运行结果

image.png

位运算符

<<(左移运算符)二进制左移运算符。将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。左移一位相当于乘2

int main()
{
	int i = 5;
	i = i << 1;
	printf("%d\n", i);
	system("pause");
	return 0;
}

输出结果为10

右移运算符>>:二进制右移运算符。将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。相当于除整除2(奇数为减一除二)

^异或运算符:二进制位相同为0,不同为1

0^0=0;
0^1=1;
1^0=1;
1^1=0;
常见面试题:101个数,50对相同数和1个单独数组成,找出单独的数,只要将所有数写个循环全部异或结果就是那个单独的数

与运算符&

0&0=0;
0&1=0;
1&0=0;
1&1=1;

或运算符|

0|0=0;
0|1=1;
1|0=1;
1|1=1;

条件运算符

如果条件为真 ? 则值为 X : 否则值为 Y

int main()
{
	int i = 5;
	int j = 6;
	int max =  i > j ? i : j;
	printf("%d\n", max);
	system("pause");
	return 0;
}  

输出结果为6

自增自减运算符

++i, --i (在使用i之前,先使i的值加(减)1)
i++, i-- (在使用i之后,使i的值加(减)1)