Youtubeでも活動中

チャンネル登録してくれたら喜びます。
リンクはフリーです。共有・拡散は大歓迎!

このボタンで簡単にチャンネル登録!
PR

python~ビットシフト~【pythonマスターへの道#013】

python-bitshift-eyecatch

今回はシフトレジスタの制御でよく使われる、

ビットシフトの考え方と、実際の使い方について一緒に学んでいきましょう。

pythonでのビットの操作は、マイコンやICを使用するときに、

レジスタの操作で必要になることがあります。

ちなみにわたしは普段ビットシフトなんてやったことがなくて、

シフトレジスタを使うときにようやくやり方を覚えた感じです…

この記事を読むことでわかること

自己紹介

東証一部上場企業でサラリーマンしてます。

主に工場(生産現場)で使用する検査装置のアプリケーション開発してます。

ヒトの作業を自動化して簡略化するアプリケーションを日々開発中。

2022年5月に転職。現役バリバリの技術者です。
現在は超大手企業の新規事業分野で装置の研究・開発をしています。

Youtubeチャンネルにさまざまな動画を上げています

↓↓↓こちらからYoutubeチャンネルにアクセス!! ↓↓↓

ビットシフトの使い道

冒頭でもお話しましたが、

ビットシフトはシフトレジスタの制御のときに大活躍します。

シフトレジスタ
シフトレジスタ

シフトレジスタとは、少ないピンの入力から、多くのピンの制御をおこなうICのことです。

RaspberryPiやArduinoは初期のピンの数が決まっていて、

そのピンの数を超えるくらいの点数を制御したい場合に使われます。

シフトレジスタを使った電子工作についての記事はこちらにあります。

↓↓↓↓↓↓

例えば、74HC595という型式のシフトレジスタを使うと、

3つの制御ピンで、8つの出力を制御することが可能です。

8つの出力といえば、7セグ+ドットのLEDの制御の数と同じですね。

ただ、制御できるピンの数を増やす方法は、シフトレジスタだけではありません。

制御ピンを増やす一例として使われている。くらいで大丈夫です。

ほかにも使い道はあるようですが、

趣味の電子工作くらいであれば、シフトレジスタを使うときくらいしか登場しないかな…

とも思っています。

実際にビットシフトしてみる

それでは早速ビットシフトしていきましょう。

まず、pythonでは2進数は0b始まりで表せます。

今回は0b0001をシフトさせていきます。

testbit=0b0001
print(testbit<<1)
print(testbit<<2)
print(testbit<<3)

さて、結果ですが、

2
4
8

となります。

ビットシフトさせるときの演算子は【<<】です。

これでビットを←へシフトさせることができます。

逆に、【>>】とすることで→へビットをシフトさせることも可能。

この結果からもう気づいたかもしれませんが、

3つのビットシフトは、こちらのように

print(0b0010)
print(0b0100)
print(0b1000)

計算されているのと同じことになります。もちろん結果も同じになります。

では次は、このビットシフトがどんな時に役立つかについて紹介していきます。

ビットシフトをいつ使うか?

ビットシフトですが、冒頭でお話した通り、シフトレジスタで使うことになります。

シフトレジスタは、決められたレジスタ(番地みたいなもの)をON/OFFすることによって、

シフトレジスタから出ている出力ピンを制御できます。

具体的なシフトレジスタの使い方でご紹介しますので、そちらをご覧になっていただければ、

イメージは付くかと思います。

軽く内容だけ触れておきますが、 74HC595 は8ビットのレジスタとなっていて、

それぞれを0か1かでまず指定して、1だった場合はONみたいな使い方です。

例えば2番と4番をONでそれ以外はOFFだった場合は、

01010000

みたいな感じでステータスを決めておきます。

そのステータスを把握するために、何番目が1立っているか確認するとき

ビットシフトさせていって、1になっているか確認すればよさそうですよね?

そして1になっている場合はシフトレジスタへONだと信号を送ってあげればOKです。

詳しい方法については、シフトレジスタの記事でご紹介します。

まとめ

わたしはシフトレジスタを扱うときくらいしかビットシフトは使いませんが、

ON/OFFなんかを2進数で扱うことはよくあります。

そんなときはビットシフトさせていって状態を確認するのに便利なので、

知識として覚えておいて損はないです。

コメント

タイトルとURLをコピーしました