0


新手向:python 判断奇偶数的二进制方法

新手向:python 判断奇偶数的二进制方法

常规方法:

一般情况下,需要判断一个数是否是偶数,常规思路是一直除2,直到余数为0,如果余数为1,则这个数为奇数

num =int(input('please input a number: '))if num%2==0:print(f'{num} is even')else:print(f'{num} is odd')

测试:

please input a number:9898is even

-------------------------------------------
please input a number:-101-101is odd

二进制方法:

直接上代码

num=int(input('please input a number: '))if num &1==0:print(f'{num} is even')else:print(f'{num} is odd')

测试:

please input a number:101101is odd
------------------------------------
please input a number:996996is even

这里if的判断条件改成了

num &1==0

这里的符号

&

是按位与运算符

与运算符的机制为

0&0=0;0&1=0;1&1=1;1&0=0;

总结一下,只有1和1与运算的情况下,计算后的值才为1,其余都是0

而如果是这种情况的话,大家有没有想通呢,在这个机制下,由于偶数转为二进制后最后一位肯定为1(不信你就找一个偶数一直除2试一试,看看最后一位是不是一定为0 (●’◡’●)),和1与运算后取0,可能到这里大家还没有什么感觉,但是继续细想的话,如果是奇数,二进制后最后一位肯定为1,和1与运算后还为1,这样就可以判断奇偶性了

对了,这里还忽略了一点,偶数最后一位一定取0是没错,那前面的数字怎么办,不管了吗???一个二进制数不可能只有最后一位吧

好,非常好,就喜欢这样的同学,但是同学你再仔细想一想,我们是和0001进行与运算,而这个数字除了最后一位是1,前面全是0,即无论你这个数前面多么长,多么无规律,多么复杂,我都不在乎,因为我前面都是0,与运算后一定也为0,这样就不用在乎前面的位啦

举个例子:

比如说,十进制里的20转换二进制为0001 0100,1转换为二进制后是0000 0001

20=00010100&1=00000001------------------#  偶数0000000035=00100011&1=00000001------------------#  奇数00000001

多提一嘴,python里你用“&”符号后,前后两个数自动就是二进制了,不用再使用bin()函数转化,不过电脑里本来装的就是二进制数字,这样可以说是回归初心?

额外:

判断一个数是否为2的幂

num & (num-1) == 0
或者
(num & -num) == num

总结

判断奇偶

num & 1 == 0

大家明白了嘛,虽然这个小技巧看起来可能没什么用,但其实还是有点用的,因为这样电脑的运算速度更快,但同时代码可读性也会降低,尽管这样很帅(bushi

总而言之,因为2的倍数的二进制最后一位都是0,所以n&1表达式跟n%2结果是一样的

谢谢大家阅读,这是我的第一篇文章,风格没那么严肃,希望大家喜欢( * ^ _^* )

标签: python

本文转载自: https://blog.csdn.net/MasterZhou1/article/details/115492662
版权归原作者 MasterZhou1 所有, 如有侵权,请联系我们删除。

“新手向:python 判断奇偶数的二进制方法”的评论:

还没有评论