【问题标题】:what is use of &(AND) operator in C language? [duplicate]C语言中&(AND)运算符有什么用? [复制]
【发布时间】:2014-07-19 04:09:05
【问题描述】:
#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语句在这里做什么? 以及为什么在程序中使用&?

【问题讨论】:

  • **if(a[i]&amp;p)** 正在编译吗?无论如何,如果它存在于两个操作数中,则它是二进制 AND 运算符复制一点到结果中

标签: c++ c


【解决方案1】:

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

例如,使用字节(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 */ 

【讨论】:

    【解决方案2】:

    &amp; 是按位与运算符。它做了听起来像的事情——and 运算符在每一位上都有。在你的情况下,如果p = 2^ka[i]&amp;p 检查机器的a[i] 的二进制表示是否将第k 位设置为1

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-15
        • 2021-11-08
        • 1970-01-01
        • 2011-06-12
        • 2021-07-01
        • 2011-10-04
        • 1970-01-01
        • 2020-04-07
        相关资源
        最近更新 更多