37453


Pythonで`if 1 & 5`とするとTrueが返ってくるのに、`if 2 &
5`とするとTrueが返ってこないのは何故なんですか？考えても答えが見つからなかったので教えて欲しいです。  
よろしくお願いします。


CC BY-SA 3.0
2017-08-24T04:32:32.080
37449
2017-08-25T02:30:49.637
25020
question
python
"if 1 & 5" がなぜTrueなのか？


[python](/questions/tagged/python "'python' のタグが付いた質問を表示") の演算子 `&`
はビット単位の論理積です。  
\- `1 & 5` の結果は `1`  
\- `2 & 5` の結果は `0`  
です（これがわからないのなら別途質問してください）。

[python](/questions/tagged/python "'python' のタグが付いた質問を表示") の条件式に整数が渡されたとき `0`
は偽 `0 以外` は真となり、質問にて書かれたとおりの結果が得られます。


CC BY-SA 3.0
2017-08-24T04:47:11.427
37451
2017-08-25T02:30:49.637
2017-08-25T02:30:49.637
8589
8589
37449
answer


両辺のビット演算(AND演算)の結果が`0`なら`False`そうでない(0以外)なら`True`と評価されているからと思います。


CC BY-SA 3.0
2017-08-24T04:48:49.767
37452
2017-08-24T04:48:49.767
20098
37449
answer


Pythonで & はビット演算のANDですから、1,2,5を２進数にして考えましょう。  
1 = 0001  
2 = 0010  
5 = 0101

ビット演算のANDなので、両方の数のビットが立っている(1である）桁の結果は１、それ以外は0になります。

1 & 5だと

>
[code]

>     0001
>  
[/code]

>
> & 0101
>
> * * *
[code]

>     0001
>  
[/code]

>
> となります。

また、2 & 5だと

>
[code]

>     0010
>  
[/code]

>
> & 0101
>
> * * *
[code]

>     0000
>  
[/code]

>
> となります。

そして、0がFalseに、0以外がTrueですから、1&5がTrue、2&5がFalseになります。


CC BY-SA 3.0
2017-08-24T04:50:52.453
37453
2017-08-24T04:50:52.453
217
37449
answer