Int数值判断奇偶的方式你真的全部知道吗

Hello,大家好!我是老丑。今天给大家分享的是关于“int数值如何判断奇数偶数”的知识。

本文阅读预计6分钟。

大家如果不知道int是啥东东的话,可以阅读Java有哪些基本类型?进行了解。

OK,int是Java八大基本类型中的一个,4字节32位

接下来,我们进入正题。

目录

  • 奇数偶数如何界定

    • 偶数

    • 奇数

  • 判断方法S

    • 常规方法

    • 常规方法-简化

    • 位运算

    • 位运算-Two

    • 位运算-Three

  • 最后

  • 学习推荐


奇数偶数如何界定

首先,我们得知道,奇数偶数如何界定,请看:

偶数

  • 定义1:在整数中,能被2整除的数,叫做偶数。
  • 定义2:二的倍数叫做偶数。

奇数

  • 定义:在整数中,不能被2整除的数叫做奇数

判断方法S

我们先定义一个类型枚举,主要是用来代表我们的类型(偶数,奇数)。

类型枚举

package cn.laochou.judge;

public enum IntEnums {
    // Even 代表偶数
    Even(0"偶数"),
    // Odd 代表奇数
    Odd(1"奇数");

    private final int code;
    private final String message;

    IntEnums(int code, String message) {
        this.code = code;
        this.message = message;
    }

    public int getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }
}

常规方法

public IntEnums regularWay(int number) {
    if(number % 2 == 0) {
     return IntEnums.Even;
    }else {
     return IntEnums.Odd;
    }
}

number % 2 == 0 这条语句中的 %  代表整除取余数。

这个方法固然是可以达到我们的目的,而且非常易读,但是我们可以进行简化一下。

常规方法-简化

public IntEnums regularWaySimplify(int number) {
 return number % 2 == 0 ? IntEnums.Even : IntEnums.Odd;
}

OK,大家可以看到,这里只用了一条语句来作为方法主体,当然这个是可以达到我们的目的的。

这里使用到了一个运算符—— 三目运算符

三目运算符的定义:

表达式b ? x : y,先计算条件b,然后进行判断。如果b的值为true,计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值。【百度百科】

对于 number % 2 == 0 ? IntEnums.Even : IntEnums.Odd 进行解释的话,就是先判断number % 2 == 0 的值,如果条件满足的话,那么就得到 IntEnums.Even ,否则就得到 IntEnums.Odd。就是这样实现的。

位运算

实际上,以上两种方法都可以达到目的,但是我们也可以通过位运算来实现我们的需求。

public static IntEnums bitOperationWay(int number) {
    return (number & 1) == 0 ? IntEnums.Even : IntEnums.Odd;
}

在这里使用了运算。大家如果不知道运算的话,我就举个列子。

不过位运算是建立在二进制的基础上的,因此我们需要将数值转为二进制。

5 的 二进制 101,1 的 二进制 1 但是是这样对齐的 int 的数值是 32 bit

1->32位
00000000000000000000000000000101
||||||||||||||||||||||||||||||||
00000000000000000000000000000001
上面便是它们之间对应

& 运算逻辑是:0 & 0 = 00 & 1 = 01 & 0 = 01 & 1 = 1也就是说,两个二进制位上同时为1,最后得到的才是1 。

数值的最后一位二进制位是1的话,一定是奇数,因为之后的二进制位所能得到的都是偶数,只有最后一位进制位为1的话,才能造成奇数——> 偶数+1=奇数

位运算-Two

难道只有运算才能实现我们的需求吗?其实不然,还有一种位运算也可以。请看

public static IntEnums bitOperationWay2(int number) {
    return (number << 31) == 0 ? IntEnums.Even : IntEnums.Odd;
}

这个实现方案也是可行的,大家如果不行,可以一试。

大家可以想一想,假设是偶数的话,那么最后一位一定是0,那么左移的31位的话,这个0值就刚好放到了第一位。

位运算-Three

再介绍一种通过位运算来达到我们目的的方式。

public static IntEnums bitOperationWay3(int number) {
        return ((number >> 1) << 1) == number ? IntEnums.Even : IntEnums.Odd;
}

这里就很巧妙了啊,大家注意((number >> 1) << 1) 加粗的这里,左移的话,最后一位二进制位会 补0

不知道大家有没有Get到我的意思,就是最后一位二进制位为0,这就保证是偶数。

最后

OK,整个推文到这里就基本结束了。

希望小伙伴们看完推文,能够有所收获。

学习路上有FingerDance,不孤单。欢迎加群——进入公众号,菜单栏【关于我们】->【加入我们】!

觉得推文写得还不错的小伙伴,还请点赞、关注、转发支持下。

Int数值判断奇偶的方式你真的全部知道吗

我是老丑,一位又老又丑的少年!我们下期见。

学习推荐

我们是FingerDance,欢迎加入我们!


原文始发于微信公众号(FingerDance):Int数值判断奇偶的方式你真的全部知道吗

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/26670.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!