优先级
错误比较法
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;
}
运行结果
位运算符
<<(左移运算符)二进制左移运算符。将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补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)