!(n & 1)
是如何工作的,为什么 !
在 ()
之前,以及为什么 n & 1
?
#include <stdio.h>
int even(int n)
{
return !(n & 1);
}
int main()
{
int pom, count=0,n;
while(scanf("%d", &n))
{
if(even(n))
{
count++;
}
}
printf("%d", count);
return 0;
}
最佳答案
该函数使用按位&
运算符(operator)检查某些东西是否均匀。号码1
表示为0001
以二进制形式。如果有偶数如14
这是 1110
32 位二进制则 114 & 1
将是0
。这是因为两个数字之间没有公共(public)位
1 1 1 0 - 14
0 0 0 1 - 1
0 0 0 0 - 0 (No common bit)
将!
反转结果,因此需要 fasly 0
并将其转换为真整数。但是,如果数字是奇数,例如 15
这是 1111
在二进制中有一个共同的数字 1111 & 1 = 1
。此处显示
1 1 1 1 - 15
0 0 0 1 - 1
0 0 0 1 - 1
和!1
真相大白1
进入虚假0
。规则是所有偶数& 1
将是0
因为永远不会有公共(public)位,而是都是奇数 & 1
将是1
因为总有一些共同点。当 !
将按位运算符的结果取反,即可判断数字是偶数还是奇数。
编辑:我意识到术语反转可能含糊不清。我所说的反转的意思是它可以做到这一点。 !n
是 0
如果n != 0
不是 0
如果n == 0
。
关于c - 该函数如何工作!(n & 1),为什么! before () ,为什么是 n & 1 ,是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40432691/