检查数字中的每个数字是否有奇怪

try*_*ryt 4 c

我正在编写一个函数来检查数字中的每个数字是否都是奇数.我遇到了这种奇怪的行为.为什么第二个函数返回不同(不正确)的结果,尽管它基本相同?(以相反的方式实施)

#include <stdio.h>

int all_odd_1(int n) {
 if (n == 0) return 0;
 if (n < 0) n = -n;

 while (n > 0) {
  if (n&1 == 1)
     n /= 10;
  else
     return 0;
  }

return 1;
}


int all_odd_2(int n) {
 if (n == 0) return 0;
 if (n < 0) n = -n;

 while (n > 0) {
  if (n&1 == 0)
     return 0;
  else
     n /= 10;
  }

return 1;
}


int main() {

 printf("all_odd_1\n");
 printf("%d\n", all_odd_1(-131));
 printf("%d\n", all_odd_1(121));
 printf("%d\n", all_odd_1(2242));
 printf("-----------------\n");
 printf("all_odd_2\n");
 printf("%d\n", all_odd_2(131));
 printf("%d\n", all_odd_2(121));
 printf("%d\n", all_odd_2(2242));
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

nc3*_*c3b 10

warning: suggest parentheses around comparison in operand of '&'
Run Code Online (Sandbox Code Playgroud)

好吧,添加它们怎么样?更改n&1(n&1).总是要求警告.


Jam*_*mes 5

==经营者具有比更高的优先级&运营商,所以你的if (n&1 == 0)说法是没有做你的期望!

(并且该if (n&1 == 1)陈述仅适用于1 == 1评估为1 的巧合;)