使用按位的奇偶程序

Even-odd program using bitwise

#include <stdio.h>

int main()
{
   int n;

   printf("Input an integer\n");
   scanf("%d", &n);

   if (n & 1 == 0)
      printf("even\n");
   else
      printf("odd\n");

   return 0;
}

这个程序没有进入 If 循环,总是打印 'odd'。我知道 if(False) 或 if(0) 正在打破条件,但 "n&1==0" 是偶数的 TRUE 条件,对吧?还是我在这里遗漏了什么?

在编译器中启用所有警告。我的说:

warning: & has lower precedence than ==; == will be evaluated first [-Wparentheses]
note: place parentheses around the & expression to evaluate it first

相等运算符 == 和 != 的优先级高于按位与运算符。

因此 if 语句中的条件等同于以下内容

if (n & ( 1 == 0 ) )

因为 1 不等于 0 那么条件可以进一步重写为

if (n & 0)

因此永远不会执行 if 语句的子语句,因为 n & 0 的计算结果总是 false ( 0 )

为了避免逻辑错误,您可以交换 if 和 else 语句。

   if (n & 1 )
      printf("odd\n");
   else
      printf("even\n");

考虑到根据 C 标准,不带参数的函数 main 应声明为

int main( void )

这是一个演示程序。

#include <stdio.h>

int main(void) 
{
    while ( 1 )
    {
        int n;

        printf( "Input an integer (0 - exit): " );

        if ( scanf( "%d", &n ) != 1 || n == 0 ) break;

        printf( "%d is %s\n\n", n, n & 1 ? "odd" : "even" );
    }

    return 0;
}

它的输出可能看起来像

Input an integer (0 - exit): 10
10 is even

Input an integer (0 - exit): 9
9 is odd

Input an integer (0 - exit): 8
8 is even

Input an integer (0 - exit): 7
7 is odd

Input an integer (0 - exit): 6
6 is even

Input an integer (0 - exit): 5
5 is odd

Input an integer (0 - exit): 4
4 is even

Input an integer (0 - exit): 3
3 is odd

Input an integer (0 - exit): 2
2 is even

Input an integer (0 - exit): 1
1 is odd

Input an integer (0 - exit): 0

& 的优先级低得惊人,因此您需要 (n & 1) == 0。更好的是,使用

if (n & 1)
      printf("odd\n");
else
      printf("even\n");

请注意,由于不同的补充方案,这是为负 int 值定义的实现,因此您可能无法得到负 n 的正确答案。也许使用 unsigned?

您不必与零进行比较。任何非零值都是真,零是假。

所以这就足够了:

   if (n & 1 )
      printf("odd\n");
   else
      printf("even\n");

printf("%s\n", (n&1) ? "odd" : "even");