c - 该函数如何工作!(n & 1),为什么! before () ,为什么是 n & 1 ,是什么意思?

标签 c boolean

!(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因为总有一些共同点。当 !将按位运算符的结果取反,即可判断数字是偶数还是奇数。

编辑:我意识到术语反转可能含糊不清。我所说的反转的意思是它可以做到这一点。 !n0如果n != 0不是 0如果n == 0

关于c - 该函数如何工作!(n & 1),为什么! before () ,为什么是 n & 1 ,是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40432691/

相关文章:

c - 限制 Web 应用程序的请求大小

c - 我不明白这个程序出了什么问题

pandas - 根据系列和数据帧中的内容生成 boolean 数据帧

java - 在java中将字符串解析为 boolean 值

Objective-c 分配类的 boolean 属性不起作用

c - 如何通过按 'Enter' 键而不是任何字母键来结束 while 循环?

c++ - 透视和双线性变换

c - 如何在C中将函数作为另一个函数的参数传递?

java - Spring jpa 在返回实体对象时更改实体 boolean 变量名称

c++ - C++ 中的 boolean 流输出表示