#判断一个数是否是奇数的优化

微信推送上看了一个Java面试题,文章的作者说可能是最简单的面试题了,题目就是判断一个数是否是奇数。
作者一开始指出大多数人会这样做

public boolean isOdd(int i) {
	if( i % 2 == 1 ) {
		System.out.println("是奇数");
	} else {
		System.out.println("是偶数");
	}
}

编译的时候发现错误,有了这种写法:

public boolean isOdd(int i) {
	if( i % 2 ==1 ) {
		return true;
	} else {
		return false;
	}
}

后来指出**if( i%2 == 1)**括号中的条件是一个什么类型呢?
就有了这种写法

public boolean isOdd(int i) {
	return i % 2 ==1;
}

随后作者又提出了一个问题,如果传入的i是一个负数呢?
于是就有了这种写法

public boolean isOdd( int i ) {
	return i % 2 == 1 || i % 2 == -1;
}

进一步优化是这样

public boolean isOdd( int i ) {
	return i % 2 != 0;
}

最后作者给出了更加好的写法,使用位运算和==按位与运算符&==来进行奇数的判断

public boolean isOdd( int i ) {
	return i >> 1 << 1 = i;
}
public boolean isOdd( int i ) {
	return i &1 == 1;
}

对算法一窍不通的我用这两种方式试了一下,也算是理解了它们的用法:

package indi.zhaoxwf.base;

/**
 * 位运算时先右移一位可以舍掉二进制的个数位
 * 如果是奇数,再左移一位会舍掉二进制个数位的1
 * 如果是偶数,原数字会保持不变
 *
 * 按位与操作会取相同的位数作为最终的值
 */
import java.util.Scanner;

public class BitewiseOper {
    public static void main(String[] args) {
        Scanner sc;
        while(true) {
            sc = new Scanner(System.in);
            int x = sc.nextInt();
            int y = x>>1;
            int z = y<<1;
            int a = x & 1;
            System.out.println(z);
            System.out.println(a);
        }
    }
}

最终的测试结果是这样的:
在这里插入图片描述
这个是看到面试题的公众号,感兴趣的朋友可以关注一下!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值