回答編集履歴

2

回答を追加

2017/11/23 06:24

投稿

defghi1977
defghi1977

スコア4756

test CHANGED
@@ -51,3 +51,29 @@
51
51
  `00001001000`
52
52
 
53
53
  であり, この`00001001000`は10進数表記で`72`というわけです.
54
+
55
+
56
+
57
+ ---
58
+
59
+ > ビット演算子は演算対象が2進数でない場合は、まず2進数に値が変換されてから行われる。ビット演算子の結果は10進数の値で返る
60
+
61
+
62
+
63
+ 違います.
64
+
65
+
66
+
67
+ 「整数型の**文字列表現**として2進・8進・10進・16進がある」のです. ソースコード上で数値を**表現**する際に何らかの文字列で値を表さなければならないので, このようなルールがあるのです. これは計算結果をコンソールに文字列として表示する際にも必要となるため, 通常は(直感的に判りやすい)10進表記が用いられているのです.
68
+
69
+
70
+
71
+ もちろん2進数や8進数表記が便利な場合もありますから, それらをサポートする関数があります.
72
+
73
+ - `parseInt([数値文字列], [基数])`
74
+
75
+ - `Integer.toString([基数])`
76
+
77
+
78
+
79
+ ビット演算子は整数型を「2進数として考え, その桁ごとに計算を行う」もので, 出力結果が2進数というわけではありません.

1

説明を追加

2017/11/23 06:24

投稿

defghi1977
defghi1977

スコア4756

test CHANGED
@@ -7,3 +7,47 @@
7
7
 
8
8
 
9
9
  JavaScriptにおける数値リテラル, ビット演算子の記法から確認して下さい.
10
+
11
+
12
+
13
+ ---
14
+
15
+ と, 解説もないのはアレなので
16
+
17
+
18
+
19
+ ---
20
+
21
+ JavaScriptにおける整数リテラルの記述には基数(n進数)指定にルールがあり,
22
+
23
+ - 0以外の数字から始まる→10進数
24
+
25
+ - 0から始まるもしくは0oから始まる→は8進数
26
+
27
+ - 0xから始まる→16進数
28
+
29
+ - 0bから始まる→2進数
30
+
31
+
32
+
33
+ と解釈されます.
34
+
35
+
36
+
37
+ さて式`1100 & 0111`の計算結果が`72`となる理由ですが
38
+
39
+ - `1100`は10進数なのでこれを2進数で表すと`10001001100`
40
+
41
+ - `0111`は**8進数**なのでこれを2進数で表すと`1001001`
42
+
43
+
44
+
45
+ となるため,
46
+
47
+ `10001001100` &
48
+
49
+ `00001001001` =
50
+
51
+ `00001001000`
52
+
53
+ であり, この`00001001000`は10進数表記で`72`というわけです.