C 这个函数是如何工作的!(n&;1),为什么!在()之前,以及为什么n&;1、这是什么意思?
《代码》是怎么写的!(n&1)工作,为什么C 这个函数是如何工作的!(n&;1),为什么!在()之前,以及为什么n&;1、这是什么意思?,c,boolean,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++; } }
代码>在()
之前,为什么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;
}
#包括
整数偶数(整数n)
{
返回!(n&1);
}
int main()
{
int pom,计数=0,n;
while(scanf(“%d”、&n))
{
if(偶数(n))
{
计数++;
}
}
printf(“%d”,计数);
返回0;
}
是逻辑NOT运算符。当你给它一个零的值时,你得到一个;如果你通过了一个非零,你就会回到零
n&1
用1
屏蔽int
,其具有二进制表示形式0000000000001
,即仅设置最后一位
- 偶数的最后一位为零;奇数的最后一位有一个
现在您可以看到公式!(n&1)
用于区分偶数和奇数
判断数字是否为偶数的另一种常用方法是检查2的整除性:
return n % 2 == 0;
此函数使用按位&
运算符检查某些内容是否为偶数。数字1
以二进制形式表示为0001
。如果在32位二进制中有一个偶数,如14
,它是1110
,则114&1
将是0
。这是因为这两个数字之间没有公共位
1 1 1 0 - 14
0 0 0 1 - 1
0 0 0 0 - 0 (No common bit)
把放进去
将结果反转,使其接受fasly0
并将其转换为真实整数。但是,如果数字是奇数,如二进制中的15
是1111
,则有一个公共数字,并且1111&1=1
。此处显示
1 1 1 1 - 15
0 0 0 1 - 1
0 0 0 1 - 1
和!1
将truthy1
转换为falsy0
。规则是所有偶数&1
都将0
,因为从来没有公共位,但所有奇数&1
都将1
,因为总是有公共位。当<代码>
反转按位运算符的结果,您可以确定数字是偶数还是奇数
编辑:我意识到“反转”一词可能有歧义。我所说的反转是指它是这样做的<代码>!如果
n!=如果n==0
,则0不为0
如果n
为奇数,则表达式n&1
为1
,如果n为偶数,则表达式0
。
运算符将表达式视为布尔值(其中1
变为true
和0
false
)并反转布尔值。如果n
是偶数,0
如果n
是奇数,n
则返回语句将值隐式转换回int
给定1
。是的,但它是递归函数还是正则函数?@TommyD此函数不是调用自身,因此它不是递归函数。后一种方法更好,因为它阐明了目的。体面的编译器将把它翻译成和指令。