新手向: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: 98
98 is even
-------------------------------------------
please input a number: -101
-101 is 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: 101
101 is odd
------------------------------------
please input a number: 996
996 is 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 = 0001 0100
& 1 = 0000 0001
------------------ # 偶數
0000 0000
35 = 0010 0011
& 1 = 0000 0001
------------------ # 奇數
0000 0001
多提一嘴,python里你用“&”符號后,前后兩個數自動就是二進制了,不用再使用bin()函式轉化,不過電腦里本來裝的就是二進制數字,這樣可以說是回歸初心?
額外:
判斷一個數是否為2的冪
num & (num-1) == 0
或者
(num & -num) == num
總結
判斷奇偶
num & 1 == 0
大家明白了嘛,雖然這個小技巧看起來可能沒什么用,但其實還是有點用的,因為這樣電腦的運算速度更快,但同時代碼可讀性也會降低,盡管這樣很帥(bushi
總而言之,因為2的倍數的二進制最后一位都是0,所以n&1運算式跟n%2結果是一樣的
謝謝大家閱讀,這是我的第一篇文章,風格沒那么嚴肅,希望大家喜歡( * ^ _^* )
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/273724.html
標籤:python
上一篇:Python基礎
