判断一个数是不是奇数
写代码似乎是先完成功能,后考虑优化,再看美观。
写出的一段代码怎么知道它的好不好呢?
最近发现个问题:如何判断一个数是不是奇数?
这个问题,很简单,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); }
}
结论
上面四个方法中,方法一是最容易想到的,也是最容易读懂的,但是传入负数时会出错,与方法二结合一下会写出更好的代码。
方法三、四是跟二进制有关,粗看之下可能会犯迷糊,但是细看还是可以看明白。
这个是近期看书逛论坛发现的,略有所感记录一下。
有没有更好的方法,欢迎各位指出。
判断一个数是不是奇数相关推荐
- 怎样知道一个数是不是2的N次方,怎样判断一个数是奇数还是偶数
1.怎样知道一个数是不是2的N次方 解: X<<1 看是否为0 将该数转换为二进制并且向左移一位,如果是0则是2的N次方 如 2=10 4=100 8=1000 16=10000 ... ...
- 怎么判断一个数是奇数还是偶数?
文章目录 怎么判断一个数是奇数还是偶数? 判断一个数是奇数还是偶数,我们最容易想到的就是对2取余. 方法一 方法二 方法二的原理是什么呢? 我的学习论坛 怎么判断一个数是奇数还是偶数? 判断一个数是奇 ...
- 位运算判断一个数是奇数还是偶数
在 leetcode 上刷题的时候,有道题需要判断一个数是奇数还是偶数.看到大神写的判断方法.记录一下 代码如下 int t = 3; // 要判断的数. int odd = t & 1; / ...
- C/C++判断一个数是奇数还是偶数的新算法(也许早有人想到了,但我个人刚想到,所以算原创吧^_^)
先说一下通用的方法: 一般的判断语句都是用求模的方式判断. 者样的方式比较通用,可以用来判断一个数是否能被另一个数整除. 普通方法的代码: #include <stdio.h> int m ...
- C语言 判断偶数个数和奇数个数
#include<stdio.h> void main(){int n,i,num,count1=0,count2=0;printf("请输入数字个数:");scanf ...
- java 判断一个数是奇数还是偶数
public class Test03 {//输入一个数,判断是奇数还是偶数public static void main(String[] args) {Scanner sc = new Scann ...
- JAVA入门--如何快速的判断一个数是奇数还是偶数
话不多说,直接上图: 1.常规判断写法:判断取余 2.我们可以发现其实:if 中的判断条件其实就是我们需要的结果值 所以我们可以这样写: 3.其实计算存储二进制(0/1)加减乘除其实是二进制之间的运算 ...
- python判断一个数是奇数还是偶数_在python中检查一个数字是奇数还是偶数
参见英文答案 > python – checking odd/even numbers and changing outputs on number size ...
- 判断一个数是奇数还是偶数
#include <stdio.h> void main() { int x; printf("请输入一个整数"); scanf("%d",& ...
- 【java】判断一个数是奇数还是偶数
关键思路 取余(模)二等于零,就是偶数,否则就是奇数 代码 int num=10;if(num%2==0){System.out.println(num+"是偶数");}else{ ...
最新文章
- java项目中使用重定向返回字符串
- php制作标签,ThinkPHP标签制作教程
- RTC 音频质量评价和保障
- Html table 实现Excel多格粘贴
- oracle 的进程
- vue.js安装与配置
- 定时任务的并发_03
- 实验三:分别用for、while和do-while循环语句以及递归方法计算n!,并输出算式...
- bmp格式图像的读写函数(对一个开源代码的封装)
- 昨天我遇到一个令我敬佩的人
- kettle连接mysql教程_KETTLE初学者使用教程
- 某公司电子商务网站策划方案
- 伪代码是计算机语言的一种吗,伪代码是什么?可以取代代码存在吗?
- 树莓派所用到的软件工具及获取方法汇总
- 学习:使用python+selenium实现路由器登陆账号密码爆破
- MMQ 开源免费 同时支持分布式架构和数据持久化、规则引擎、ACL的MQTT broker。
- 发布Flask项目到服务器
- 施工员报考建筑八大员报考提高工程建筑施工人员安全生产意识
- JNA 中 GetProcAddress(HMODULE hmodule, int ordinal) 的正确使用方式。LoadLibrary
- OpenStack Swift Architecture
热门文章
- 明尼苏达大学博导“约法十章”火了:没事不乱开会、合写论文不要催导师,复旦教授直呼值得学习...
- 一文说清长安链ChainMaker同步模块
- 公链、私链、联盟链、侧链简介
- 1044: 不及格率 C语言
- 【Microsoft Azure 的1024种玩法】六十三.通过全局 VNet 对等互连实现同一区域不同网段的虚拟网络实时打通
- 家庭组网:Vlan单线复用,故障检测以及五种“软路由”加mesh组网方案
- VMware虚拟机安装Kali破解WiFi密码
- JAVA Swing添加表格
- ubuntu系统打不开网易云音乐解决办法。
- 历年软件设计师下午考试试题汇总统计