どうも。どっことです。今回はSQLでのビット演算について備忘録を記載します。
SQLでビット演算
SQLでもビット演算することができます。ビット演算は情報系の学生やエンジニアには基礎的な内容ですが、Androidだけで言えば使うことがあまり多くないかもしれません。
しかし、確かにビット演算による機能実装は行われており、例えばIntent
に付与するflag
の値はこのビット演算により制御されています。
これをもとに考えると、アプリやデータなどの複数の重複した状態を管理するのに向いていそうです。例えばSNSのコメントの「お気に入り」「リブート/リポスト」「いいね」などを管理するとき、booleanで管理するのが一番シンプルな実現方法ですが、最大値7の整数(000〜111)でまとめてしまう、という管理でも実現することができます。これの嬉しいことは、似たようなデータ要素を追加するとき、例えば「ミュート」を追加する場合にも、変数を追加せずに最大桁数を7→15の整数(0000〜1111)に上げることだけで十分実現できるということです。
変数を追加するというのはプログラムのデータ上だけでなくデータベースのテーブルやAPIでのやりとりにも影響してくるので、このようなOn/Offのデータをビット管理するのは拡張性を意識したときに優れていると考えられます。
積(and)
例
select 1 & 1; 1
select 1 & 0; 0
和(or)
例
select 1 | 1; 1
select 1 | 0; 1
select 0 | 0; 0
反転(not)
例
select ~0; -1
select ~1; 0
左シフト
例
select 1<<2; 4
右シフト
例
select 4>>1; 2