写代码似乎是先完成功能,后考虑优化,再看美观。

写出的一段代码怎么知道它的好不好呢?

最近发现个问题:如何判断一个数是不是奇数?

这个问题,很简单,1、3、5、7、9这些就是奇数,或者以这些数结尾的就是奇数,就是除2没法得到整数的数。

在计算机语言上,对2取模,判断一下就好了。
所以:

方法一

public class Demo_isOdd {public static boolean isOdd(int a) {boolean result;if (a % 2 == 1) {result = true;} else {result = false;}return result;}public static void main(String[] args) {boolean a = Demo_isOdd.isOdd(3);System.out.println("是奇数?  "+a);     }
}

问题解决 ! ?

传入1、2、3、4、5、6。。。这些数字,的确是做出了准确的判断。

如果传入一个负数呢?-1,-2,-3?

结果是出错了,说-1不是奇数。

上面的逻辑是最容易想到的一个方法,但是取模这个运算对负数操作后得到了-1,进而判断出错。

我们可以优化一下,还是对2取模,能整除的就是偶数,不能整除的就是奇数。并且还可以写的简洁一点,于是:

方法二

public class Demo_isOdd {public static boolean isOdd(int a) {return a % 2 != 0;}public static void main(String[] args) {boolean a = Demo_isOdd.isOdd(-3);System.out.println("是奇数?  "+a);     }
}

还能再有其他方法吗?
我们知道信息存储在计算机中都是二进制的01代码,数字也不例外。所以十进制的数字在计算机中保存的是二进制的格式,那么:

1----0001
2----0010
3----0011
4----0100
5----0101
6----0110
7----0111
8----1000
9----1001
……
很容易发现,偶数的末位是0,奇数的末位是1,那我们就可以使用移位运算符来进行操作:把一个数先向右移动一位,再向左移动一位。

第一次移动时,若数字是偶数,丢失的是0,第二次移动时补0,数值不会发生改变;
第一次移动时,若数字是奇数,丢失一位数字1,第二次移动时补0,数值发生改变,与原值相比少了1。

所以可以使用:

方法三

public class Demo_isOdd {public static boolean isOdd(int a) {return a >> 1 << 1 != a;}public static void main(String[] args) {boolean a = Demo_isOdd.isOdd(-3);System.out.println("是奇数?  "+a);       }
}

还是上面的二进制数值,可以知道数值的奇偶都是取决于最后一位数是0还是1,那能不能只研究最后一位就可以判断出数值的奇偶呢?

答案是可以。

将这个数与1进行与运算,数值前面的位会被1前面的0与运算变成0,而最后一位是0,结果就是0,为偶数;最后一位是1结果就是1,为奇数。
所以:

方法四

public class Demo_isOdd {public static boolean isOdd(int a) {return (a & 1) == 1;}public static void main(String[] args) {boolean a = Demo_isOdd.isOdd(-3);System.out.println("是奇数?  "+a);      }
}

结论

上面四个方法中,方法一是最容易想到的,也是最容易读懂的,但是传入负数时会出错,与方法二结合一下会写出更好的代码。

方法三、四是跟二进制有关,粗看之下可能会犯迷糊,但是细看还是可以看明白。

这个是近期看书逛论坛发现的,略有所感记录一下。

有没有更好的方法,欢迎各位指出。

判断一个数是不是奇数相关推荐

  1. 怎样知道一个数是不是2的N次方,怎样判断一个数是奇数还是偶数

    1.怎样知道一个数是不是2的N次方 解: X<<1 看是否为0 将该数转换为二进制并且向左移一位,如果是0则是2的N次方 如 2=10 4=100 8=1000 16=10000 ... ...

  2. 怎么判断一个数是奇数还是偶数?

    文章目录 怎么判断一个数是奇数还是偶数? 判断一个数是奇数还是偶数,我们最容易想到的就是对2取余. 方法一 方法二 方法二的原理是什么呢? 我的学习论坛 怎么判断一个数是奇数还是偶数? 判断一个数是奇 ...

  3. 位运算判断一个数是奇数还是偶数

    在 leetcode 上刷题的时候,有道题需要判断一个数是奇数还是偶数.看到大神写的判断方法.记录一下 代码如下 int t = 3; // 要判断的数. int odd = t & 1; / ...

  4. C/C++判断一个数是奇数还是偶数的新算法(也许早有人想到了,但我个人刚想到,所以算原创吧^_^)

    先说一下通用的方法: 一般的判断语句都是用求模的方式判断. 者样的方式比较通用,可以用来判断一个数是否能被另一个数整除. 普通方法的代码: #include <stdio.h> int m ...

  5. C语言 判断偶数个数和奇数个数

    #include<stdio.h> void main(){int n,i,num,count1=0,count2=0;printf("请输入数字个数:");scanf ...

  6. java 判断一个数是奇数还是偶数

    public class Test03 {//输入一个数,判断是奇数还是偶数public static void main(String[] args) {Scanner sc = new Scann ...

  7. JAVA入门--如何快速的判断一个数是奇数还是偶数

    话不多说,直接上图: 1.常规判断写法:判断取余 2.我们可以发现其实:if 中的判断条件其实就是我们需要的结果值 所以我们可以这样写: 3.其实计算存储二进制(0/1)加减乘除其实是二进制之间的运算 ...

  8. python判断一个数是奇数还是偶数_在python中检查一个数字是奇数还是偶数

    参见英文答案 > python – checking odd/even numbers and changing outputs on number size                   ...

  9. 判断一个数是奇数还是偶数

    #include <stdio.h> void main() { int x; printf("请输入一个整数"); scanf("%d",& ...

  10. 【java】判断一个数是奇数还是偶数

    关键思路 取余(模)二等于零,就是偶数,否则就是奇数 代码 int num=10;if(num%2==0){System.out.println(num+"是偶数");}else{ ...

最新文章

  1. java项目中使用重定向返回字符串
  2. php制作标签,ThinkPHP标签制作教程
  3. RTC 音频质量评价和保障
  4. Html table 实现Excel多格粘贴
  5. oracle 的进程
  6. vue.js安装与配置
  7. 定时任务的并发_03
  8. 实验三:分别用for、while和do-while循环语句以及递归方法计算n!,并输出算式...
  9. bmp格式图像的读写函数(对一个开源代码的封装)
  10. 昨天我遇到一个令我敬佩的人
  11. kettle连接mysql教程_KETTLE初学者使用教程
  12. 某公司电子商务网站策划方案
  13. 伪代码是计算机语言的一种吗,伪代码是什么?可以取代代码存在吗?
  14. 树莓派所用到的软件工具及获取方法汇总
  15. 学习:使用python+selenium实现路由器登陆账号密码爆破
  16. MMQ 开源免费 同时支持分布式架构和数据持久化、规则引擎、ACL的MQTT broker。
  17. 发布Flask项目到服务器
  18. 施工员报考建筑八大员报考提高工程建筑施工人员安全生产意识
  19. JNA 中 GetProcAddress(HMODULE hmodule, int ordinal) 的正确使用方式。LoadLibrary
  20. OpenStack Swift Architecture

热门文章

  1. 明尼苏达大学博导“约法十章”火了:没事不乱开会、合写论文不要催导师,复旦教授直呼值得学习...
  2. 一文说清长安链ChainMaker同步模块
  3. 公链、私链、联盟链、侧链简介
  4. 1044: 不及格率 C语言
  5. 【Microsoft Azure 的1024种玩法】六十三.通过全局 VNet 对等互连实现同一区域不同网段的虚拟网络实时打通
  6. 家庭组网:Vlan单线复用,故障检测以及五种“软路由”加mesh组网方案
  7. VMware虚拟机安装Kali破解WiFi密码
  8. JAVA Swing添加表格
  9. ubuntu系统打不开网易云音乐解决办法。
  10. 历年软件设计师下午考试试题汇总统计