位操作符
& 按位与
| 按位或
^ 按位异或
注:他们的操作数必须是整数。
& 两个整数比特位有假(0)就为假(0),只有全为真(1)就为真(1)
举个例子:老师叫两个学生来办公室,说张三与(&)李四过来,如果只一个人过去就不满足老师说的话(为假),必须两个人都过去(为真)。
| 两个整数比特位只要有真就为真,只有全为假(0)就为假(0)
举个例子:老师叫两个学生来办公室,说张三或(|)李四过来,如果只一个人过去就满足老师说的话(为真),只有两个人都不过去的话才(为假)。
^ 两个整数比特位相异为真相同为假( 从名字上来说就是两个比特位如果相异就用按位或处理)
例子:1101 1101
^ 0100 ^0000
1001 1101
按位异或操作符总结:任何数与0异或操作结果就是本身
逻辑操作符
&& 逻辑与
|| 逻辑或
C语言中逻辑符号结果只有1或0
&& 逻辑与 两个表达式都为真时结果为真
举个例子:老师叫两个学生来办公室,说张三与(&&)李四过来,如果只一个人过去就不满足老师说的话(为假),必须两个人都过去(为真)。
|| 逻辑或 两个表达式只要有一个为真时结果为真
举个例子:老师叫两个学生来办公室,说张三或(||)李四过来,如果只一个人过去就满足老师说的话(为真),只有两个人都不过去的话才(为假)。
另外注意:逻辑与&&遇到表达式为假直接出结果就不执行后面的操作了。
逻辑或遇到表达式为真直接出结果就不执行后面的操作了。
例子
int main()
{
int i = 0;
int j = 0;
a = 0, b = 1, c = 3;
i = a++ && ++b && c++;
printf("a=%d b=%d c=%d\n", a, b, c);//a++后置++先用在自增 所以第一个表达式为假 ,后面两个就不执行了 最后输出结果为1 1 3
//j = a++ || ++b || c++;
//printf("a=%d b=%d c=%d\n", a, b, c);//a++后置++先用在自增 所以第一个表达式为假,接着执行第二个表达式++b结果为真后面一个就不执行了 最后输出结果为1 2 3
return 0;
}
按位操作符和逻辑操作符的区别
按位与&和逻辑与&&
1&2运算 0001&0010——>0000 结果为0
1&&2运算 结果为1(真)
按位或|和逻辑或||
1|2运算 0001|0010———>0011 结果为3
1||2运算 结果为1(真)