以下代码段不能正确测试奇怪性:
public static boolean isOdd(int i) {
return i % 2 == 1;
}
Run Code Online (Sandbox Code Playgroud)
我在网上看到我应该通过以下方式做到:
public static boolean isOdd(int i) {
return i % 2 != 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
Sto*_*lly 34
可能因为(i % 2) != 0正数和负数都有效
Old*_*eon 12
你应该使用:
(i & 1) != 0
Run Code Online (Sandbox Code Playgroud)
避免签署问题.
另请注意,使用&确保编译器无论多么愚蠢,它都不会尝试使用除法来实现%操作.
如果将模运算符替换为按位运算符,则第一个代码段将正常工作:
public static boolean isOdd(int i) {
return (i & 1) == 1;
}
Run Code Online (Sandbox Code Playgroud)