Goforyouqp  

目录

|

||

&

&&

示例代码

输出结果

解释


|

在C语言中,|是按位或运算符,用于对两个操作数的每个对应位执行逻辑或操作。它将两个操作数的对应位进行逻辑或运算,并返回结果。按位或运算符只能用于整数类型的操作数。

unsigned int a = 5;     // 二进制表示为:00000101
unsigned int b = 3;     // 二进制表示为:00000011
unsigned int result = a | b;   // 二进制结果为:00000111,十进制结果为:7

int x = 10;     // 二进制表示为:00001010
int y = 6;      // 二进制表示为:00000110
int result = x | y;   // 二进制结果为:00001110,十进制结果为:14

||

在C语言中,||是逻辑或运算符,用于判断两个表达式的逻辑或关系。它要求两个表达式中至少有一个为真(非零),则返回真(非零)值;如果两个表达式都为假(0),则返回假(0)值。||逻辑或运算符通常用于条件语句或逻辑表达式中。

int a = 5;
int b = 10;
if (a > 0 || b > 0) {
    // 当a或b中至少有一个大于0时,执行此代码块
}

在上述示例中,'||'符号用于判断两个表达式的逻辑或关系,如果a或b中至少有一个大于0,则执行if语句块内的代码。需要注意的是,在使用逻辑或运算符||时,如果第一个表达式已经为真,则不再计算和评估第二个表达式,因为只需要其中一个表达式为真就会返回真值。这种行为被称为"短路求值"。

&

在C语言中,& 是按位与运算符和取地址运算符。1. 按位与运算符:& 用于对两个操作数的每个对应位执行按位与操作。它将两个操作数的每个对应位进行逻辑与运算,并返回结果。

   unsigned int a = 5;     // 二进制表示为:00000101
   unsigned int b = 3;     // 二进制表示为:00000011
   unsigned int result = a & b;   // 二进制结果为:00000001,十进制结果为:1

   int x = 10;     // 二进制表示为:00001010
   int y = 6;      // 二进制表示为:00000110
   int result = x & y;   // 二进制结果为:00000010,十进制结果为:2

通过按位与运算符 & 对两个操作数的对应位进行逻辑与运算,并返回结果。

2. 取地址运算符:& 用于获取变量的内存地址。它可以应用于任何变量或数组,并返回变量的地址。

 int num = 10;
 int* ptr = #  // 取得 num 的地址,并将其赋值给指针 ptr

 通过取地址运算符 & 可以获得变量 num 的内存地址,并将其赋值给指针 ptr。

&&

在C语言中,&& 是逻辑与运算符。它用于判断两个表达式的逻辑与关系。只有当两个表达式都为真(非零)时,表达式的结果才会为真(非零)。&& 逻辑与运算符通常用于条件语句或逻辑表达式中。

int a = 5;
int b = 10;
if (a > 0 && b > 0) {
    // 当a和b都大于0时,执行此代码块
}

在上述示例中,'&&'符号用于判断两个表达式的逻辑与关系。只有当a和b都大于0时,if语句块内的代码才会执行。需要注意的是,在使用逻辑与运算符&&时,如果第一个表达式已经为假(0),则不再计算和评估第二个表达式,因为只有两个表达式都为真时,整个表达式才会为真。这种行为被称为"短路求值"。

示例代码

#include <iostream>

int main()
{
	
	int x,y,z;//定义变量
	x = y = 10;//变量赋值
	z = ++x || ++y;//或逻辑运算,编辑器代码优化,只要判断前面一个条件为真,则输出为真,后面条件不再运算
		printf("x=%d\ty=%d\tz=%d\n", x,y,z);//控制台输出结果
	//输出的结果为x=11	y=10	z=1
	
	int X, Y, Z;
	X = Y = 10;
	Z = ++X | ++Y;//按位或的操作,++X为11,二进制为00001011,同理++Y也是00001011,按位或得到00001011,即十进制11
		printf("X=%d\tY=%d\tZ=%d\n",X,Y,Z);
	//输出结果为X=11	Y=11	Z=11

	int a, b, c;//定义变量
	a = b = 10;//变量赋值
	c = ++a && ++b;//与逻辑运算,要判断两个条件都为真才为真,所以两个条件都进行运算
		printf("a=%d\tb=%d\tc=%d\n", a, b, c);//控制台输出结果
	//输出结果为a=11	b=11	c=1

	int A, B, C;
	A = B = 10;
	C = ++A & ++B;//按位与运算,与上面或运算同理
		printf("A=%d\tB=%d\tC=%d\n", A, B, C);
	//输出结果为A=11	B=11	C=11

	int i, j;
	i = j = 10;
	if(i++||j++)//使用||进行逻辑运算,前面条件为真不再进行后面的运算
		printf("i=%d\tj=%d\t\n", i, j);
	//输出结果为i=11	j=10	

	int I,J;
	I = J = 10;
	if (I++ | J++)//使用|进行逻辑运算,前面条件为真,后面的条件继续运行
		printf("I=%d\tJ=%d\t\n", I, J);
	//输出结果为I=11	J=11	

	return 0;
}

输出结果

x=11    y=10    z=1
X=11    Y=11    Z=11
a=11    b=11    c=1
A=11    B=11    C=11
i=11    j=10
I=11    J=11

解释

  •  第一组输出(x=11,y=10,z=1)是因为在执行 `z = ++x || ++y` 时,++x 的结果为 11,由于前面的条件已经为真(非零),所以不再执行 ++y。因此,x 变为 11,y 保持不变,z的值为1(真)。
  • 第二组输出(X=11,Y=11,Z=11)是因为在执行 `Z = ++X | ++Y` 时,++X 和 ++Y 的结果都为 11。按位或运算会对每个位进行逻辑或操作,所以结果为 11(二进制表示为 00001011,十进制表示为 11)。
  •  第三组输出(a=11,b=11,c=1)是因为在执行 `c = ++a && ++b` 时,++a 和 ++b 都会被执行。而逻辑与运算符 && 需要判断两个条件都为真才为真,所以两个条件都会进行运算。因此,a 和 b 的值都变为 11,c 的值为 1(真)。
  • 第四组输出(A=11,B=11,C=11)是因为在执行 `C = ++A & ++B` 时,++A 和 ++B 都会被执行。按位与运算符 & 对每个位进行逻辑与操作,所以结果为 11(二进制表示为 00001011,十进制表示为 11)。
  • 第五组输出(i=11,j=10)是因为在条件语句 `if(i++||j++)` 中,初始值 i 和 j 都为 10。++i 操作会先将 i 的值加 1,并且条件表达式 `i++` 中的后缀递增运算符会使得条件判断里面的 i 的值为 11。而 || 运算符在前一个条件为真时不再运算后面的条件,所以 j 的值不会递增。因此,i 的值为 11,j 的值保持为 10。
  • 第六组输出(I=11,J=11)是因为在条件语句 `if (I++ | J++)` 中,初始值 I 和 J 都为 10。++I 是前缀递增运算符,会先将 I 的值加 1,所以条件判断里面的 I 的值为 11。而 | 运算符会对每个位进行逻辑或操作,所以结果为 11(二进制表示为 00001011,十进制表示为 11)。同时,J 的值也会递增。因此,I 和 J 的值都为 11。
posted on 2023-06-29 11:05  嵌入式小白-小黑  阅读(1741)  评论(0编辑  收藏  举报  来源