1. 判断奇偶数
1.1 题目描述
【题目描述】
给定一个整数,判断该数是奇数还是偶数。如果n是奇数,输出odd;如果n是偶数,输出even。【输入】
输入仅一行,一个大于零的正整数n。【输出】
输出仅一行,如果n是奇数,输出odd;如果n是偶数,输出even。
1.2 思路讲解
思路讲解之前,请先思考一下除了一般做法的其他思路,尽量往位运算方面靠。
1.2.1 转成二进制
和位运算有关的题都建议先转成二进制再观察或者进行位运算符的操作得到规律
如下图所示,奇数转成二进制后最低位均为1,偶数转成二进制后最低位均为0
所以判断一个数是奇数还是偶数只需要知道它的最低位是0还是1
如果是0输出even,如果是1输出odd
1.2.2 运用位运算符
那么问题从判断奇偶转成怎么知道它的最低位是0还是1
由图上的举例可知任意数&1都等于这个数的最低位
(即&1操作是对最低位进行保留,其他位归零的操作)
原因:0&1=0所以偶数的最低位仍然是0而其余位进行&0会被归零
1&1=1所以偶数的最低位仍然是1而其余位进行&0会被归零
那么除了按位与&有这种特殊的意义,按位或|是否也有特殊的意义?
由图上的举例可知奇数|1等于这个数,偶数|1等于这个数+1
原因:0|1=1所以偶数的最低位会变成1而其余位进行|0会被保留
1|1=1所以奇数的最低位仍然是1而其余位进行|0会被保留
原来按位与&和按位或|有这种特殊的意义,那我们不难猜到按位异或^是否也有特殊的意义?
由图上的举例可知奇数1等于这个数-1,偶数1等于这个数+1
原因:01=1所以偶数的最低位会变成1而其余位进行0会被保留
11=0所以奇数的最低位会变成0而其余位进行0会被保留
1.2.3 总结
思路:任意正整数&1,如果是0输出even,如果是1输出odd
位运算符的技巧
| 正整数 | &1 | |1 | ^1 |
|---|---|---|---|
| 奇数 | 1 | 原来的数 | 原来的数-1 |
| 偶数 | 0 | 原来的数+1 | 原来的数+1 |
1.3 代码实现
1.3.1 C语言
1.3.2 Java
2. 写在最后
简简单单的判断奇偶数引出了位运算符的巧妙之处。希望看完这篇文档的你,能动手验证一下。纸上得来终觉浅,绝知此事要躬行。
8. 文档分享
如果您觉得这份关于位运算符的文档还不错,尝试点击分享这份文档给好友吧!
作者 @MythicalCreature
于2020 年 08月 15日发布