ビット演算、Python編
何回ビット演算をやれば気が済むのかw、今回ももちろんソースコードから
# coding:EUC-JP#ミスターの積荷
bit_and = 41 & 30 ;
print bit_and ;bit_or = 41 | 30 ;
print bit_or ;bit_xor = 41 ^ 30 ;
print bit_xor ;print ~ 41 ;
1.ビットand
これも例に外れず、それぞれの数値のビットを比較して
「両方とも『1』ならば『1』、そうでなければ『0』となる」
ではビットandの表を見てもらおう
* | 32 | 16 | 8 | 4 | 2 | 1 |
41 | 1 | 0 | 1 | 0 | 0 | 1 |
30 | 0 | 1 | 1 | 1 | 1 | 0 |
計 | 0 | 0 | 1 | 0 | 0 | 0 |
見てもらうのは8の行だ、両方とも『1』になっている。
その為、結果は8となり。
bit_andという変数には8が代入されて8という結果が表示される。
2.ビットor
これも例にはずれず、ビットandに次の動作が加わります。
「それぞれのビットを比較して、どっちかが『1』の場合は『1』となる」
また今度はビットorの表を見てもらおう
* | 32 | 16 | 8 | 4 | 2 | 1 |
41 | 1 | 0 | 1 | 0 | 0 | 1 |
30 | 0 | 1 | 1 | 1 | 1 | 0 |
計 | 1 | 1 | 1 | 1 | 1 | 1 |
今度は全部が1になってしまった、結果は「63」だ。
なぜ63なのか、それは
「*」の右の数字を全部足したからだ、足すのは「計が『1になっている』所だけだよ」
3.ビットxor
これは「それぞれのビットを比較して、どちらかが『1』である場合1となる。
ただし両方とも『1』の場合は『0』となる。」
この表はこちら
* | 32 | 16 | 8 | 4 | 2 | 1 |
41 | 1 | 0 | 1 | 0 | 0 | 1 |
30 | 0 | 1 | 1 | 1 | 1 | 0 |
計 | 1 | 1 | 0 | 1 | 1 |
複雑やね
4.これが締めだぞ「ビット反転」
これは「元の値に1を加算して、符号を反転させたもの」となっている。
それはこちら
元の値:41
加算した値:42
反転させた値:−42
とりあえず、ビット演算は終了と