在 C 语言中 &(AND) 运算符的用法是什么?

what is use of &(AND) operator in C language?

本文关键字:运算符 用法 是什么 AND 语言      更新时间:2023-10-16
#include <stdio.h>
#include <math.h>
int main()
{
     int n,i,j;long long p,sum=0,count;
     scanf("%d",&n);
     long long a[n];

     for(i=0;i<n;i++)
          scanf("%lld",&a[i]);
     for(j=0;j<64;j++)
     {
         count=0;
         p=pow(2,j);
         for(i=0;i<n;i++)
             {
                 **if(a[i]&p)**
                 count++;
             }
         sum+=(count*(count-1)*p/2);
     }
     printf("%lld",sum);
     return 0;
}

第二个for循环中的if语句在这里做什么?为什么呢?在程序中使用?

位与操作符是一个&符号:&一个方便的助记方法是小版本的布尔与运算&&适用于更小的数据块(位而不是字节、字符、整数等)。本质上是二进制AND只是对a的每个位置的位进行逻辑与运算二进制数

例如,处理字节(char类型):

01001000 & 
10111000 = 
--------
00001000

第一个数的最高位是0,所以我们知道结果的最高位一定是0;在第二高的位上,第二个数字的位是零,所以我们得到同样的结果。唯一两个位都为1的时候,也是唯一结果为1的时候,就是从左边算起的第5位。因此,

72 & 184 = 8

更多例子

   unsigned int a = 60; /* 60 = 0011 1100 */  
   unsigned int b = 13; /* 13 = 0000 1101 */
   int c = 0;           
   c = a & b;       /* 12 = 0000 1100 */ 

&是位与运算符。它就像听起来的那样,在每个位上做and运算符。在您的示例中,如果p = 2^k, a[i]&p检查a[i]的机器二进制表示是否将第k位设置为1

AND运算符比较给定的两个输入位,如果两个位都为1,则结果为1。否则返回0