在 C 语言中 &(AND) 运算符的用法是什么?
what is use of &(AND) operator in C language?
#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
相关文章:
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 这里的 = 运算符有什么用法?
- C++:类类型引用运算符=用法
- 在调用运算符重载时识别调用上下文/用法C++
- 逗号运算符与圆括号表达式的用法示例
- C++ + 运算符的这种用法叫什么?目的是什么
- 是具有复制和交换习惯用法的复制赋值运算符,建议进行自赋值检查
- 为什么内存泄漏只发生在赋值运算符重载的情况下,而不是在复制构造函数中,以及复制和交换习惯用法如何解决它
- C++前缀增量运算符返回左值这一事实的实际用法
- unordered_multimap用法和运算符覆盖
- ()运算符的这种特殊用法是什么意思
- 逗号运算符的正确用法是什么
- 运算符重载和到布尔的隐式转换与安全布尔习惯用法有关
- 在 C 语言中 &(AND) 运算符的用法是什么?
- 条件运算符的奇怪用法 (>?=)
- 这是逻辑"and"运算符的正确用法吗?
- c++中的运算符|=及其用法