jk-meets-js

恋に落ちるコード.js [技術系コメディ/短編/連載中]

This project is maintained by 8novels

萌えるビット演算 -A little bit of love.-

「ねえ、樹里」
「どうした絵子。絵子の台詞からのスタートは初めてのパターンだな」
「あのさ、ビット演算、ってあるじゃない。あれって、どういう時に使うのかなーって思って」
「…………な、な、な」

 |篠宮樹里《しのみやじゅり》は手にしていたマグカップを取り落とし、わなわなと震えだした。
 放課後、|情報処理《JS》部。
 |瀬尾絵子《せのおえこ》と樹里、二人きりの部室はかつてない緊張に包まれる。

「絵子、ついにその言葉を口にしてしまったのか」
「どど、どうしたの、樹里」
「ビット演算。その難解さゆえ、JavaScript初心者の熱意を次々と打砕き葬り去るという魔のビット演算。それに手を出すとは……」
「え、そんな大変なこと言っちゃったの私」
「絵子はこの情報処理部を廃部へと追い込むつもりなのか?」
「いや、そこまで……何だかわからないけど、何かごめん」

「まあ、いいわ。いずれ通る道だしな。それでは覚悟を決めて、今日はビット演算について説明する」
「よ、よろしく、お願いします」

「さて、まずは前提条件として。コンピューターの内部では、すべての数値は0か1かの2進数で表現される。これは知っているだろうか」
「あ、それは知ってる」
「ちなみに今の人類が10進数を採用しているのは、たまたま手足の指が10本だったからだ。もし人類の指が皆8本だったら、もしくは16本だったら、よりコンピューターとの親和性が高い生活になっていたかもしれない」
「まあ、言わんとすることは何となくわかる」

 絵子は両手を見つめながら頷く。

「では。日常の数字を2進数で表現してみる。例えば、絵子の年齢は10001歳だ」
「えー……っと、うん、合ってる。何か悪魔みたい」
「スリーサイズは、上から1001111、1101……」
「ぎゃーーーっ!!ぎゃーーーっ!!|Ctrl+C《ブレイク》、|Ctrl+C《ブレイク》」

 思わず大声をあげた絵子は、肩で息をしながら樹里を睨みつける。その顔は真っ赤だ。

「ちょっと、何で言っちゃうのよ! もう……」
「二人しかいない部室で何か問題でも?」
「恥ずかしいってば……そして、胸はせめてあと1ビット欲しいよう」
「そう、そこなのだよ」

 樹里は絵子の胸元にビシッと指を突きつける。

「なによ、もう」
「単に貧乳というだけでは不完全である。貧乳に恥じらう、というその仕草。貧乳へのコンプレックス。そこに、萌え要素は発生するのだ」
「……何の話?」
「そして、そこにビット演算の本質がある」
「え、まさかの。繋がってたんだ」

「ビット演算とは、文字通りビット同士の計算のことだ。で、ビットとは言ってみれば1けたの数値のことであり、値は0か1かのいずれかである」
「演算って、いわゆる四則演算……だったっけ? プラスとかマイナスとか。あれとは違うの?」
「本質的には同じだ。要は、2つの数をルールに基づいて計算し、新たな数を決定するという本質は変わらない。ただし四則演算との最大の違いは、すべての数の桁数、すなわちビット数が同じということ」
「どういうこと?」
「つまり、1ビットと1ビットとの計算結果は、1ビットになる。繰り上がりなどはない。また、1ビットと2ビットとの計算といった、桁数の違う数同士の計算はそもそもできない」
「ふーん」

「では、代表的なビット演算子について見ていこう」
「はーい」
「まずはAND 演算だ。演算子には「&」を使用し、「x & y」と表記する」
「あんどー」
「この演算子は、xとyの両方とも1の場合のみ、結果も1になる。それ以外だと0になる」
「どっちも1の場合に1、だからANDなのね」
「そう。つまり、『貧乳』と『コンプレックス』が合わさった時こそ、萌えビットに1が燦然と輝くのだ」
「何だ急に。何なのよ、萌えビットって」
「あとは、『文学少女』と『黒髪ロングヘアー』、『いい年した大人』が『セーラー服』などが、2つ合わさってこそ価値のあるものである」
「個人の感想です」

「次にOR 演算だ。演算子には「|」を使用し、「x | y」と表記する」
「おあー」
「この演算子は、xとyのいずれかが1であれば、結果も1になる。もちろん両方とも1だった場合も結果は1だ」
「どっちかが1ならば1、だからOR、と」
「例えば、『ツンデレ』『隠れ巨乳』『テンパった時の言葉づかいが変』などは、それ単体でSレアクラスの萌え要素である。もし仮にもう一つの特徴が『大酒飲み』や『ムダ毛が多い』などの非萌え要素であったとしても、萌えビットの1は揺るがない」
「いや、『大酒飲み』は場合によっては……いやいやいや、乗っからなくていいんだよ、私」
「無論、Sレアが2つ合わさった時など、萌えビットはそれはもう最強レベルの1となる」
「何なんだろう、最強レベルの1って」

「続いてXOR 演算だ。XORは排他的論理和などとも呼ばれる。演算子には「^」を使用し、「x ^ y」と表記する」
「えく……えっく…………なんて読むの、これ」
「素直にエックスオアでいい。で、この演算子はやや複雑だ。xとyの値が異なる場合、結果は1になる。同じであれば0になる」
「確かに、ちょっとややこしいね」
「異なる者同士が合わさった時に1となる。すなわち、いわゆるギャップ萌えというやつだ」
「そうきたか」
「例えば、『ロリ』とくれば『幼児体形』であろう。この二つは親和性が高く、故に目新しさはない。しかし、いずれかのビットが0だった場合はどうだ?すなわちロリなのにグラマラスな巨乳、もしくはいい大人なのに幼児体形という結果になる。この瞬間、萌えビットに1が燦然と輝くのだ。これをギャップ萌えと言わずして何という」
「何とも言わなくていいし、声高に言うことでもないから」
「他には、『清楚な美少女』かつ『知的』な場合。魅力的な女性ではあるが萌え要素には乏しい。しかし、『知的』ビットが0の場合、要はアホの子だった場合に萌え要素は跳ね上がる。萌えビット1だ」
「深いねー、いろんな意味で」

「最後に、NOT演算。演算子には「~」を使用する」
「のっと!」
「これは、先に挙げた3つとは少し毛色が違い、単にビットを反転させる動きをする。~1なら0といった具合だ」
「ほう」
「白と言ったら黒という。まさに全否定、ツンデレのツンではないか。いずれ親愛度が上がると全肯定されるようになるから頑張りたまえ」
「ルールまで変わっちゃってるし」

「さて、ビット演算について理解できただろうか」
「さっぱりわかんないよ! 何ひとつ入ってこないよ! なんだこれ!」

 絵子は両手を振り上げてまくし立てる。

「うーむ。絵子には萌えの概念は難しすぎたか」
「説明がふざけすぎにも程がある、って言ってんのよ」
「そうか。じゃあ……ビット演算が本領を発揮する時と言うのは、大量の真偽値を瞬時に、高速に処理したい場合だ。例えばオンラインゲームなんかでたくさんのキャラクターが居る時に、ステータスを一挙に変更したい場合、とかな」
「あれ、真面目な話に戻ってる」
「じゃあ実際にキャラのステータスで説明しよう。ちょっと簡略化して3ビットとし、上から順に毒、麻痺、睡眠のステータスを表すとする。健康な状態なら000だ」
「うん。RPGだと良くあるね」
「このキャラを毒の状態にするには、100をOR演算すれば良い。毒のステータスだけが1になり、他のステータスに変化はない」
「えっと、麻痺状態が1の場合だと……おおー、ほんとだ」
「逆に解毒アイテムを使った時には、011をAND演算すれば良い。これも、毒だけが0になり、他には変化がないことがわかるだろう」
「ほんとだ、すごいよこれ」
「じゃあ、ステータスが全快するような万能の薬を使った時は?」
「000でAND演算だ!」
「その通り。では、私の信頼も全快したところで、今からまとめに入る」
「はい、お願いします、先生」

「プログラムの規模が大きくなればなるほど、処理の高速化は重要な問題になってくる。この際、メモリの使用量が少なく済む上に高速な処理ができるビット演算は、絶大な威力を発揮する」
「確かに効率的だわ」
「if文のような条件分岐が何度も発生するプログラム。大量の変数が定義され、管理に困るプログラム。高速化や効率化を図りたくなった時は、ビット演算が使えないかどうか考えてみるのもいいだろう」
「はーい」
「ちなみに、ビット演算には他に『ビットシフト演算』というものもあるのだが、今日は長くなったのでまたの機会に」
「わかった」
「よし、講義も終わったところで、絵子にはこの服の着用を許可しよう」
「…………何これ」
「縞模様のニーソックス、通称縞ニーソだ。こっちは胸の部分がほどよく開いたタートルネックである。どちらも着るだけで萌えビットを1にできるぞ」
「あ、ちょっと待ってて。通報するから」