我正在编写一个函数来检查数字中的每个数字是否都是奇数.我遇到了这种奇怪的行为.为什么第二个函数返回不同(不正确)的结果,尽管它基本相同?(以相反的方式实施)
#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).总是要求警告.
该==经营者具有比更高的优先级&运营商,所以你的if (n&1 == 0)说法是没有做你的期望!
(并且该if (n&1 == 1)陈述仅适用于1 == 1评估为1 的巧合;)