普通は「%」を使って偶奇の判断を行うと思いますが、ここではbit演算の「and」で数字の偶奇の判断を行ってみます。
ビット単位演算
ビット演算(ビットえんざん、bitwise operation: 直訳すると「ビット毎操作」)とは、固定長のワードなどといった「ビットのカタマリ」(コンピュータの数値表現なども参照)に対して、各のビット全てに対する論理演算をいっぺんに行う演算操作である。
出典: フリー百科事典『ウィキペディア(Wikipedia)』
ビット演算 (bit 演算) の使い方を総特集! 〜 マスクビットから bit DP まで 〜
bin()
bin()
を使うことで、10進数の数字を2進数に変換できます。
インタラクティブモードで、10進数0から7を2に進数に変換してみます。
>>> bin(0) '0b0' >>> bin(1) '0b1' >>> bin(2) '0b10' >>> bin(3) '0b11' >>> bin(4) '0b100' >>> bin(5) '0b101' >>> bin(6) '0b110' >>> bin(7) '0b111'
奇数の時は一桁目が1、偶数の時は1桁目が0になっていることが分かります。
AND演算
pythonでは、x & y
と書くことで、x と y のビット単位 論理積を得ることができます。
AND | 結果 |
---|---|
0 & 0 | 0 |
0 & 1 | 0 |
1 & 0 | 0 |
1 & 1 | 1 |
数字と1を&
することで、偶数の時は0、奇数の時は1になります。
""" 1 : 0 0 1 0 0 1 & ----- 0 0 1 3 : 0 1 1 0 0 1 & ----- 0 0 1 2 : 0 1 0 0 0 1 & ------ 0 0 0 """
関数にまとめて試してみます。
>>> def is_even_odd(x: int): ... if x & 1 ==0: ... return '偶数' ... return '奇数' ... >>> print(is_even_odd(200)) 偶数 >>> print(is_even_odd(999)) 奇数
想定通りの結果になりました。
以下に続きます。