逻辑与和按位与、逻辑或和按位或的区别

首先分别明确一下他们各自的概念。

按位与和按位或

按位与和按位或都属于位操作符。

注意:位操作符的操作数必须是整数。

按位与“&”

按二进制位对应的位进行与运算,对应位都为1时,结果才为1

3&5
3的二进制:   00000000000000000000000011 //32位系统中
5的二进制:   00000000000000000000000101 //32位系统中
按位与的结果:00000000000000000000000001

代码验证

int main()
{
      int a = 3;
      int b = 5;
      int c = a&b;     
      
      printf("%d\n", c);
      return 0;
}

运行结果
在这里插入图片描述

按位或“|”

按二进制位对应的位进行或运算,对应位只要一个为1,结果就为1。

3|5
3的二进制:   00000000000000000000000011 //32位系统中
5的二进制:   00000000000000000000000101 //32位系统中
按位与的结果:00000000000000000000000111 

代码验证

int main()
{
    int a = 3;
    int b = 5;
    int c = a | b;

    printf("%d\n", c);
    return 0;
}

运行结果
在这里插入图片描述

逻辑与和逻辑或

逻辑与和逻辑或都是逻辑操作符。逻辑与和逻辑或关注的是操作符两边的表达式本身是真还是假。

C语言用整数表示逻辑真,用表示逻辑假。但在判断一个数据的时,却以非0为根据:如果为0,则判定为逻辑假;如果为非0,则判定为逻辑真

逻辑与“&&”

“&&”运算符两边的式子只有都是真,整个逻辑表达式的值才是真(即为1),否则整个逻辑表达式的值就是假(即为0)。

代码验证

int main()
{
	int a = 3;
	int b = 5;
	int c = a && b;
	printf("%d\n",c);
	return 0;
}

运行结果
在这里插入图片描述

逻辑或“||”

“||”运算符两边的式子只要一个式子为真,整个逻辑表达式的值就是真(即为1),否则整个逻辑表达式的值就是假(即为0)。

代码验证

//一真一假
int main()
{
	int a = 0;
	int b = 5;
	int c = a || b;
	printf("%d\n",c);
	return 0;
}

运行结果
在这里插入图片描述

//两个同时为假
int main()
{
	int a = 0;
	int b = 0;
	int c = a || b;
	printf("%d\n",c);
	return 0;
}

运行结果
在这里插入图片描述
题目:程序输出的结果是什么?

int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;
  
	printf(" a=%d\n b=%d\n c=%d\n d=%d\n",a ,b ,c ,d);

	return 0;
}

运行结果
在这里插入图片描述
这里程序为什么输出的是这样一个结果呢?

逻辑与运算中操作符“&&”左边的式子只要为假(0)就不进行运算了。i = a++ && ++b && d++中。最左边的“a++”先参与运算后加加,a=0先参与逻辑或运算,因为操作符“&&”左边为0所以右边就停止计算。

逻辑与和按位与,逻辑或和按位或的区别

按位与和按位或是用二进制对应的位进行与和或运算,而逻辑与和逻辑或关注的是操作符两边的表达式本身是真还是假。

1&2----->0
1&&2---->1

1|2----->3
1||2---->1

版权声明:本文为cyrilcloud原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。