Help us understand the problem. What is going on with this article?

ビット演算入門

More than 1 year has passed since last update.

ビット演算入門

プログラムの基本であるビット演算ですが、はっきり言って知らなくても何とでもなります。
ですが、知っている事によってプログラムの選択肢を広げる事ができ、実際に使うと便利な場面もあります。
さらにビット演算は多くのコンピューター言語で使用する事ができるため、一度覚えれば様々な環境で使う事ができます。
本稿ではビット演算を知らない人向けに、ビット演算がどんな物であるかと簡単な実例を解説します。

ビット演算とは

まずビット(bit)とは何か?

コンピューターは無数のON/OFFのスイッチの集合体で、このスイッチの事をビットと呼び、スイッチ1個を1ビットと呼びます。
そしてこのスイッチは8個セットで運用されており、この8個のグループの事をバイト(byte)と呼び、グループ1組で1バイトです。
プログラムは0と1の集合体だと話を聞いた事があるかもしれませんが、ここから来ています。
表記するときには00000000のように表記し、右側から0ビット目、1ビット目...とカウントしていきます。
※1からカウントする事も多々あるので注意

ビット演算とは

無数のスイッチのON/OFFの切り替えを制御するのがビット演算です。
ON/OFFと一言で済んでしまいますが、様々なシチュエーションの為に複数の命令が用意されています。

そしてON/OFFの制御ですが、基本的に8の倍数個をまとめて行います。
つまりバイト単位です。
各言語で1バイト変数・2バイト変数など様々ありますが、その変数全てのバイト全てにまとめて命令を出す形になります。

演算子

演算子とは+や-などの計算する時に使う計算記号の事です。
ビット演算は数学では使用しない特殊な計算記号で、6つあります。
基本的に帰ってくる結果は1ビット目同士・2ビット目同士と順にチェックしていき、その結果が1ビット目・2ビット目に結果がそれぞれ入ります。

&(AND)

2つスイッチを比較して、どちらも1なら1、どちらか片方でも0の場合は0を返します。
フラグをビット管理している時に、そのフラグが立っているのかを調べたりするのに使います。
例:c = a & b
a 11110000
b 10101010
  ↓
c 10100000

|(OR)

2つスイッチを比較して、どちらかが1なら1、どちらも0の場合は0を返します。
フラグをビット管理している時に、そのフラグを立てる時などに使います。
例:c = a | b
a 11110000
b 10101010
  ↓
c 11111010

!(NOT)※~の場合も

スイッチのON/OFFの状態をすべて逆転させ、0は1に、1は0に変えます。
真逆の状態にしたいときに使います。
例:c = !a
a 11110000
  ↓
c 00001111

^(XOR)

2つスイッチを比較して、どちか片方だけ1なら1、どちらも0またはどちらも1の場合は0を返します。
どこが違うか調べるときなどで使います。
例:c = a ^ b
a 11110000
b 10101010
  ↓
c 01011010

>>(右ビットシフト)

スイッチのON/OFFの状態を、右に1個ずらします。
ずらした事により空いた枠には0が入り、決められた桁数からはみ出た分は消えます。
このはみ出たらら消える事を、オーバーフローと呼びます。
ループを使ってビット操作するときになど使います。
記:c = a >> 1
a 11110000
  ↓
c 01111000

<<(左ビットシフト)

スイッチのON/OFFの状態を、左に1個ずらします。
こん部分以外は右ビットシフトとほぼ同じです。
記:c = a >> 1
a 11110000
  ↓
c 11100000

まとめ

以上がビット演算の基本になります。
これらを組み合わせる事により、単なる+-×÷ではできないようなコンピューター特有の計算をする事ができます。
実際に使いだすと、変数が何バイトなのか等気にする事も多いですが、オーバーフローを意図的に使ったりと工夫のし甲斐があります。
世の中はビットコインで白熱していますが、たまにはビット演算の事も思い出してくださいね!

Ingward
2008年度の新卒として「株式会社エイチーム」に入社。 紆余曲折を経て現在は「株式会社エイチーム引越し侍」及び「株式会社エイチームコネクト」に所属。 トラックボールをこよなく愛する30代。
a-hikkoshi
当社は、親会社である株式会社エイチームの経営理念をそのままに、引越しの比較サービス開始以降、大切にしてきた「三方よし」の理念を基本として、世の中に求められるサービスの創造を目指します。 一緒に働けるエンジニアを募集しております。下記URLよりご応募ください。 https://bit.ly/3lwf7QJ
https://hikkoshi.a-tm.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした