「JavaScript/ビット演算」の版間の差分

削除された内容 追加された内容
256 行
0 ^ 0; // 1が返る </nowiki>
 
* [[w:ブール代数|ブール代数]]
* [[w:ビット演算|ビット演算]]
 
これらの演算はビットごとに行われるため、通常の四則演算とは違った考え方で結果を捉える必要がある。
例として10進数で7を挙げる、これを2進数に直すと、「111」となる。
同じように2も2進数では「10」と表記されるため、このビット積「7&2」は次の様に、ビットごとの計算が行われるため次の様になる
 
{| class="wikitable"
290 行
 
この性質を利用すればビット積で末尾1ビットを残すことで、奇数、偶数の判別が可能である。
この様にして必要ビットのみを取り出す操作を[[w:ビットマスク|ビットマスク]]と呼ぶ。
<nowiki>
num & 1; // 1なら奇数、0なら偶数 </nowiki>
299 行
10 | 13; // 2進数では、1010 | 1101であるから、結果は「1111」、つまり15が返る</nowiki>
 
(2進法よりも簡潔な記述を行うため、実際のコードでは次の様に16進法で記述を行う)
<nowiki>
0xa | 0xd; // 0xfが返る</nowiki>
 
この仕掛けを利用すれば、一つの数字データに複数のデータを格納できる事に気づく。
例えば、コンピュータ内部で色を扱う場合の例で、数値型データの中から、32ビットの数値を8ビットごとに区切ってそれぞれ、透明度、赤、緑、青を格納している。
(これをARGB系と呼んでいる)
取り出す場合には、次の様にコードを記述する。色を一つの数字型にまとめて格納することが出来る
 
<nowiki>
321 ⟶ 323行目:
 
実際にはビット演算には他にも数多くのテクニックが存在するが、今回のその解説は省略した。
JavaScriptでのプログラミングでは、スクリプトの評価の方が処理時間をとっているためC言語などで様に高速化手法としては使われない。
そのため、InternetExplolerでActiveXオブジェクトとのデータのやりとりなど、他の言語環境とのデータのやり取りに使われることもあるが、実際にこれらの演算手法を使う機会は他の言語より少ない。
基本的には、配列などの他の方法を使うよりこちらの方が鮮やかに記述できる場合に利用すべきである。