ビット演算について ( No.54 )
日時: 2023/03/19 23:23
名前: REDCHEEKS

以前に >>47 で説明した、列挙型(enum型)について、これは便利な機能ではあるが、1つ弱点がある。
それは、複数選択ができないという事。 例えば、
"おねしょ" と "ショタ" という項目があったとき、選択できるのはどちらか1つ、両方選ぶことができないということだ。
その弱点をカバーするのが、ビット演算である。

このビット演算というのは、基本情報技術者試験にも出てくるよ。
http://ja.wikipedia.org/wiki/%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E8%80%85%E8%A9%A6%E9%A8%93
http://www.jitec.ipa.go.jp/1_11seido/fe.html
基本情報技術者試験の試験勉強というと、ふつう眠くなるが、REDCHEEKSのスパプログラミング講座は、下ネタ満載ちんちん勃起するから、全然眠くならなくていいだろ(笑)
そうなんだ、勉強はちんちん勃起させてやるのが効果的なんだ。 太いちんちんお役立ち!
というわけで、さっそく解説を始めよう。

まず、画面の作成だが、以前にディクショナリー(辞書)の説明 >>50 で使った「Superアリババ翻訳」のプロジェクト画面をそのまま流用する。
以下のプログラム修正を行うだけでオッケーだ。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20221108193237.png

@ button1_Click() 内のプログラムをすべてコメント化する。
A ビット演算のプログラムを追加する。
B 「開始」ボタンをクリックする。

動作確認は、以下の通り。

1を入力して翻訳ボタンをクリックすると「おねしょ検出」と表示されること。
2を入力して翻訳ボタンをクリックすると「ショタ検出」と表示されること。
3を入力して翻訳ボタンをクリックすると「おねしょ検出ショタ検出」と表示されること。
7を入力して翻訳ボタンをクリックすると「おねしょ検出ショタ検出射精検出」と表示されること。


プログラム解説

まず、if ((bits & 0b00000001) > 0) のなかで、 0b00000001 これ2進数なんだな。
最初に、0bと来ると、コンピューターは2進数と判断するんだ。
2進数って学校で習ったよね? コンピュータ内部は基本的に電気の ON と OFF しかない、0 か 1 かの2進数の世界なんだ。
0bに続く8桁の数字、これ2進数が8桁、8ビットのデータが集まって、1バイトのデータになるんだ(byte 型)。
アルバイトじゃないよ、8ビットひとかたまりのデータを1バイトという。

さらにプログラムを見ていくと、
0b00000001 と、1番右端だけが、1 になっているのが、おねしょ検出用のマスク
0b00000010 と、右から2番目だけが、1 になっているのが、ショタ検出用のマスク
0b00000100 と、右から3番目だけが、1 になっているのが、射精検出用のマスク

ところで "マスク" って何? それはタイガーマスクのマスク、コロナでおなじみになったあのマスクと同じだな、要するに顔を覆い隠し一部だけ出すもの。
つまり、(bits & 0b00000001) とは、bits というデータを覆い隠し、右端のビットだけを取り出すという意味。
つまり、if ((bits & 0b00000001) > 0) とは、右端のビットが 1 かどうか判定しているということだ、そこに 1 があれば、おねしょが検出されるわけだ。
同様に、if ((bits & 0b00000010) > 0) とは、右から2番目のビットが 1 かどうか判定しているということだ、そこに 1 があれば、ショタが検出されるわけだ。
では、右端と右から2番目が、両方とも 1 だったら、おねしょとショタが両方検出される、つまり「おねショタ」が検出されるわけだ。
このように、列挙型(enum 型)とはちがって、ビット演算を使えば「どちらか1つではなく両方選ぶことができる」つまり「おねショタ」という性癖もデータとしてコンピュータに登録できるようになるということだ。
まとめると、

1 --> 01 おねしょ
2 --> 10 ショタ
3 --> 11 おねショタ

まさしく、2進数そのものだね。


ps. ちなみに 7 を入力すると「おねしょ検出ショタ検出射精検出」になるのはわかるよね?
7 は2進数に直すと、111 つまり、3つともそろっているわけだ

p.s.(2) とりあえずボクの大好きな「射精」を3ビット目に追加したが、皆さんも、右から4ビット目以降で、自分の好きな性癖を検出するプログラムを追加し、いろんな数字を入力して遊ぼう。

ビットシフトについて ( No.55 )
日時: 2022/11/21 00:39
名前: REDCHEEKS

引き続き、今回は、ビットシフトの話をしよう。

前回 >>54 の例だと(http://mediasp.kir.jp/img20220326/imgloglog-box/img20221108193237.png
検出項目が増えるごとに、if 文が増えて行くので、あまりよくない。

そこで、繰り返しループを使ったプログラムに書き換えよう。

http://mediasp.kir.jp/img20220326/imgloglog-box/img20221120234834.png
@ おねしょ検出、ショタ検出、射精検出の if 文をコメント化する。
A 同様の処理を、繰り返しループを使って書き直す、ついでに、カー、キー、スパンコも追加する。
B 「開始」ボタンをクリックする。
C 63 と入力する。
D 「翻訳」ボタンをクリックする。
E すべてが検出されること。

ここで、カギになる技術が「ビットシフト」なんだな。

mask <<= 1;     // 1ビット左シフトして、次の変態へ

これは要するに、

00000001

00000010

00000100


10000000

とビットを右から左へ、1つずつ、ずらして行くのだ。

1つずつ、ずらしながら、変態趣味を照合して行くのだ。

ビットシフト面白いだろ。 ビットを自在に操れるだろ。


p.s. オレって自縛趣味はないけど、自分を調教する趣味があるんだな。
もし来世マトリックスで蘇る事ができたら...ビットを自在に操って、自分の尻叩いて調教するプログラム作ってみたいね。

p.s.(2) ちなみに、byte は、8ビットなので、カー、キー、スパンコも追加した上記の例だと、あと2つで終わりだが、
他にも ushort(16ビット)や、uint(32ビット)や、ulong(64ビット)があるから、大抵の変態趣味はOKだね