问题描述
看java解惑pdf这本书遇到一个问题:当i是一个负奇数时,i%2等于-1而不是1,因此isOdd方法将错误地返回false。为了防止这种意外,请测试你的方法在为每一个数值型参数传递负数、零和正数数值时,其行为是否正确。这个问题很容易订正。只需将i%2与0而不是与1比较,并且反转比较的含义即可:publicstaticbooleanisOdd(inti){returni%2!=0;}如果你正在在一个性能临界(performance-critical)环境中使用isOdd方法,那么用位操作符AND(&)来替代取余操作符会显得更好:publicstaticbooleanisOdd(inti){return(i&1)!=0;}iTePub.Net-Collect总之,无论你何时使用到了取余操作符,都要考虑到操作数和结果的符号。该操作符的行为在其操作数非负时是一目了然的,但是当一个或两个操作数都是负数时,它的行为就不那么显而易见了。&符号可以替代%操作吗?
解决方案
解决方案二:
不能,这个是特殊情况,&是按位运算,按位是二进制的,所以正好可以代替%2因为是二进制的,所以如果是偶数,最后一位永远都是0,如果是奇数最后一位永远都是1
时间: 2024-11-01 09:20:27