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

时间:2014-07-19 04:09:06

标签: c++ c

#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;
}

if for循环中的if语句在这里做什么? 为什么&amp;在程序中使用?

3 个答案:

答案 0 :(得分:1)

  

按位AND运算符是单个&符号:&amp ;.一个方便的助记符是   小版本的布尔AND,&amp;&amp;,适用于较小的部分   (位而不是字节,字符,整数等)。本质上是一个二进制   AND简单地获取a的每个位置中的位的逻辑AND   二进制形式的数字。

例如,使用字节(char类型):

EX。

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

第一个数字的最高有效位为0,因此我们知道结果的最高有效位必须为0;在第二个最高有效位中,第二个数字的位为零,因此我们得到相同的结果。两个位都是1的唯一时间,即结果为1的唯一时间,是左起第五位。因此,

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 */ 

答案 1 :(得分:0)

&是按位AND运算符。它听起来像是 - 并且每个位都有操作符。在您的情况下,如果p = 2^ka[i]&p检查机器的a[i]的二进制表示是否将第k位设置为1

答案 2 :(得分:0)

AND 运算符比较两个给定的输入位,如果两个位均为1,则将结果设为1.否则为0。