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

削除された内容 追加された内容
編集の要約なし
Ef3 (トーク | 投稿記録)
→‎ビット演算: ビット演算を行う前にNumber型の値を一度32ビットの整数に変換をすることである。 これは、JavaScriptの数値型は倍精度浮動小数点型(64ビットFloat)で、仮数部が53ビットで、それ以下の2の冪乗が32ビットという理由からである。
タグ: 2017年版ソースエディター
3 行
 
== ビット演算 ==
* [[w:ビット演算{{Wikipedia|ビット演算]]}}
 
JavaScriptには、2進数(ビットパターン)を操作するためのビット演算子が用意されている。これらの演算子は、他の演算子ほど頻繁に使用されるものではないので、必要ない場合はこのセクションを読み飛ばしてもかまわない。
注:この項目は主にJavaScriptにおける2進法の計算方法を解説するが、ページとしての独立性が高く、ほかの項目との関連が薄い。
そのため、必ずしもこの項を読む必要は無く、この場では読み飛ばして学習の程度にあわせて後々に読んでも構わない。
 
=== ビット演算 ===
29 ⟶ 28行目:
 
JavaScriptでビット演算を行ううえで注意すべきことは、ビット演算を行う前にNumber型の値を一度32ビットの整数に変換をすることである。
これは、現在JavaScriptプロセ数値型は倍精度浮動小数点型(64ビトFloat)で、仮数部3253ビットで、それ以下整数型を扱いやす2の冪乗が32ビットと事を考えう理由かれて作られていると思われである。
 
ビット演算を既に理解している場合はこれ以降の解説は必要ないと思われるが、プログラミング初学者のために以降はビット演算の基本的な解説を行う。
37 ⟶ 36行目:
コンピューターは、その回路構成を単純にするため通常内部的に2進法を用いているため、2進数で計算できるものはこちらで計算した方が高速に動作するため
、通常こちらを利用する。
二進法とは、10進法とは違い2の倍数で桁上げを行う数の表記法である。理解のために、10進法と、2進、3進、4進法での数の表記の対応表、さらに8進法」、16進法の表記を載せる。
 
{| class="wikitable"
|+ 異なる基数での整数リテラル表記
|- align="right"
! 10進法
| 10
| 1
| 2
64 ⟶ 65行目:
|- align="right"
! 2進法
| 10b0
| 100b1
| 110b10
| 1000b11
| 1010b100
| 1100b101
| 1110b110
| 10000b111
| 10010b1000
| 10100b1001
| 10110b1010
| 11000b1011
| 11010b1100
| 11100b1101
| 11110b1110
| 100000b1111
| 100010b10000
| 100100b10001
| 100110b10010
| 101000b10011
| 0b10100
|- align="right"
! 3進法
| 1
| 2
| 10
| 11
| 12
| 20
| 21
| 22
| 100
| 101
| 102
| 110
| 111
| 112
| 120
| 121
| 122
| 200
| 201
| 202
|- align="right"
! 4進法
| 1
| 2
| 3
| 10
| 11
| 12
| 13
| 20
| 21
| 22
| 23
| 30
| 31
| 32
| 33
| 100
| 101
| 102
| 103
| 110
|- align="right"
! 8進法
| 10o0
| 20o1
| 30o2
| 40o3
| 50o4
| 60o5
| 70o6
| 100o7
| 110o10
| 120o11
| 130o12
| 140o13
| 150o14
| 160o15
| 170o16
| 200o17
| 210o20
| 220o21
| 230o22
| 240o23
| 0o24
|- align="right"
! 16進法
| 10x0
| 20x1
| 30x2
| 40x3
| 50x4
| 60x5
| 70x6
| 80x7
| 90x8
| a0x9
| b0xa
| c0xb
| d0xc
| e0xd
| f0xe
| 100xf
| 110x10
| 120x11
| 130x12
| 140x13
| 0x14
|}
 
*{{See [[also|w:二進記数法|二進記数法]]}}
 
2進法は、大き小さな数になるほどでも桁数が増える多いため、記述を短く簡単に抑えるため通常は16進法を使って記述を行う。
16進法では、9を超える数には順にa,b,c,d,e,fと記号を振ってあり1~15までを一桁で表せる。
16進法を使用する場合には、数字の前に0xを付けて表記する。
183 ⟶ 143行目:
その後、ECMA-262第6版で 0b (または 0B)を前置する2進法表記とともに 0o (または 0O)を前置する8進法表記で復活した。
 
*{{See [[also|JavaScript/数値#整数]]|w:十六進法}}
* [[w:十六進法|十六進記数法]]
 
=== 補数 ===
191 ⟶ 150行目:
簡単のため、この項の解説はあえて省略をする。
 
*{{See [[also|w:補数]]}}
 
=== ビットシフト ===
260 ⟶ 219行目:
0 ^ 0; // 0が返る </nowiki>
 
*{{See [[also|w:ブール代数|ブール代数]]w:ビット演算}}
* [[w:ビット演算|ビット演算]]
 
これらの演算はビットごとに行われるため、通常の四則演算とは違った考え方で結果を捉える必要がある。
337 ⟶ 295行目:
この変化は実際にかなり早い時期におこっており、1946年のENIACの登場の後に、2進数での設計の方が回路構成が単純になるという論文が登場しており、後継の1951年のEDVAC(エドバック)では既に2進数での計算に移っています。
 
*[[{{Main|w:ENIAC]]}}
}}