JSチュートリアル

JSホーム JSの紹介 JSどこへ JS出力 JSステートメント JS構文 JSコメント JS変数 JS Let JSConst JSオペレーター JS算術 JS割り当て JSデータ型 JS関数 JSオブジェクト JSイベント JS文字列 JS文字列メソッド JS文字列検索 JS文字列テンプレート JS番号 JS番号メソッド JSアレイ JS配列メソッド JS配列ソート JSアレイの反復 JSアレイ定数 JSの日付 JSの日付形式 JS DateGetメソッド JS日付設定メソッド JS数学 JSランダム JSブール値 JSの比較 JS条件 JSスイッチ JSループFor JSループフォーイン JSループの JSループWhile JSブレイク JSIterables JSセット JSマップ JS Typeof JS型変換 JSビット単位 JS RegExp JSエラー JSスコープ JSホイスト JS厳密モード JSこのキーワード JSアロー関数 JSクラス JS JSON JSデバッグ JSスタイルガイド JSのベストプラクティス JSの間違い JSパフォーマンス JS予約語

JSバージョン

JSバージョン JS 2009(ES5) JS 2015(ES6) JS 2016 JS 2017 JS 2018 JS IE /エッジ JSの歴史

JSオブジェクト

オブジェクト定義 オブジェクトのプロパティ オブジェクトメソッド オブジェクト表示 オブジェクトアクセサー オブジェクトコンストラクター オブジェクトのプロトタイプ オブジェクト反復可能 オブジェクトセット オブジェクトマップ オブジェクトリファレンス

JS関数

関数の定義 関数パラメーター 関数の呼び出し 関数呼び出し 機能適用 関数クロージャ

JSクラス

クラスイントロ クラス継承 クラス静的

JS非同期

JSコールバック JS非同期 JSの約束 JS Async / Await

JS HTML DOM

DOMイントロ DOMメソッド DOMドキュメント DOM要素 DOM HTML DOMフォーム DOM CSS DOMアニメーション DOMイベント DOMイベントリスナー DOMナビゲーション DOMノード DOMコレクション DOMノードリスト

JSブラウザBOM

JSウィンドウ JS画面 JSロケーション JSの歴史 JSナビゲーター JSポップアップアラート JSタイミング JSクッキー

JS Web API

WebAPIイントロ WebフォームAPI Web履歴API WebストレージAPI WebワーカーAPI Web Fetch API Web Geolocation API

JS AJAX

AJAXイントロ AJAX XMLHttp AJAXリクエスト AJAX応答 AJAXXMLファイル AJAX PHP AJAX ASP AJAXデータベース AJAXアプリケーション AJAXの例

JS JSON

JSONイントロ JSON構文 JSONとXML JSONデータ型 JSON解析 JSON文字列化 JSONオブジェクト JSON配列 JSONサーバー JSON PHP JSON HTML JSON JSONP

JSとjQuery

jQueryセレクター jQuery HTML jQuery CSS jQuery DOM

JSグラフィックス

JSグラフィックス JSキャンバス JSPlotly JS Chart.js JSグーグルチャート JS D3.js

JSの例

JSの例 JS HTML DOM JSHTML入力 JSHTMLオブジェクト JSHTMLイベント JSブラウザ JSエディター JS演習 JSクイズ JS証明書

JSリファレンス

JavaScriptオブジェクト HTMLDOMオブジェクト


JavaScriptのビット演算


JavaScriptビット演算子

Operator Name Description
& AND Sets each bit to 1 if both bits are 1
| OR Sets each bit to 1 if one of two bits is 1
^ XOR Sets each bit to 1 if only one of two bits is 1
~ NOT Inverts all the bits
<< Zero fill left shift Shifts left by pushing zeros in from the right and let the leftmost bits fall off
>> Signed right shift Shifts right by pushing copies of the leftmost bit in from the left, and let the rightmost bits fall off
>>> Zero fill right shift Shifts right by pushing zeros in from the left, and let the rightmost bits fall off

Operation Result Same as Result
5 & 1 1 0101 & 0001  0001
5 | 1 5 0101 | 0001  0101
~ 5 10  ~0101  1010
5 << 1 10 0101 << 1  1010
5 ^ 1 4 0101 ^ 0001  0100
5 >> 1 2 0101 >> 1  0010
5 >>> 1 2 0101 >>> 1  0010

JavaScriptは32ビットのビット演算子を使用します

JavaScriptは数値を64ビット浮動小数点数として格納しますが、すべてのビット演算は32ビットの2進数で実行されます。

ビット単位の演算が実行される前に、JavaScriptは数値を32ビットの符号付き整数に変換します。

ビット単位の演算が実行された後、結果は64ビットのJavaScript数値に変換されます。

上記の例では、4ビットの符号なし2進数を使用しています。このため、〜5は10を返します。

JavaScriptは32ビットの符号付き整数を使用するため、10を返しません。-6を返します。

00000000000000000000000000000101(5)

11111111111111111111111111111010(〜5 = -6)

符号付き整数は、左端のビットをマイナス記号として使用します。



ビットごとのAND

ビットごとのANDがビットのペアに対して実行される場合、両方のビットが1の場合は1を返します。

1ビットの例:
手術結果
0&00
0&10
1&00
1&11
4ビットの例:
手術結果
1111&00000000
1111&00010001
1111&00100010
1111&01000100

ビットごとのOR

ビットのペアに対してビットごとのORが実行されると、ビットの1つが1の場合、1を返します。

1ビットの例:
手術結果
0 | 00
0 | 1
1 | 01
1 | 11
4ビットの例:
手術結果
1111 | 00001111
1111 | 00011111
1111 | 00101111
1111 | 01001111

ビット単位のXOR

ビット単位のXORがビットのペアに対して実行される場合、ビットが異なる場合は1を返します。

1ビットの例:
手術結果
0 ^ 00
0 ^ 1
1 ^ 01
1 ^ 1
4ビットの例:
手術結果
1111 ^ 00001111
1111 ^ 00011110
1111 ^ 00101101
1111 ^ 01001011

JavaScriptビット単位AND(&)

ビット単位のANDは、両方のビットが1の場合にのみ1を返します。

10進数バイナリ
500000000000000000000000000000101
100000000000000000000000000000001
5&100000000000000000000000000000001(1)

let x = 5 & 1;

JavaScriptビット単位OR(|)

ビットの1つが1の場合、ビットごとのORは1を返します。

10進数バイナリ
500000000000000000000000000000101
100000000000000000000000000000001
5 | 100000000000000000000000000000101(5)

let x = 5 | 1;

JavaScriptビット単位XOR(^)

ビットが異なる場合、ビット単位のXORは1を返します。

10進数バイナリ
500000000000000000000000000000101
100000000000000000000000000000001
5 ^ 100000000000000000000000000000100(4)

let x = 5 ^ 1;

JavaScriptビット単位NOT(〜)

10進数バイナリ
500000000000000000000000000000101
〜511111111111111111111111111111010(-6)

let x = ~5;

JavaScript(ゼロフィル)ビット単位の左シフト(<<)

これはゼロフィル左シフトです。1つ以上のゼロビットが右から押し込まれ、左端のビットが脱落します。

10進数バイナリ
500000000000000000000000000000101
5 << 100000000000000000000000000001010(10)

let x = 5 << 1;

JavaScript(符号保存)ビット単位の右シフト(>>)

これは右シフトを維持する兆候です。左端のビットのコピーが左から押し込まれ、右端のビットが脱落します。

10進数バイナリ
-511111111111111111111111111111011
-5 >> 111111111111111111111111111111101(-3)

let x = -5 >> 1;

JavaScript(ゼロフィル)右シフト(>>>)

これはゼロフィル右シフトです。1つ以上のゼロビットが左から押し込まれ、右端のビットが脱落します。

10進数バイナリ
500000000000000000000000000000101
5 >>> 100000000000000000000000000000010(2)

let x = 5 >>> 1;

2進数

1ビットのみが設定された2進数は、簡単に理解できます。

バイナリ表現10進値
000000000000000000000000000000011
000000000000000000000000000000102
000000000000000000000000000001004
000000000000000000000000000010008
0000000000000000000000000001000016
0000000000000000000000000010000032
0000000000000000000000000100000064

さらに数ビットを設定すると、バイナリパターンが明らかになります。

バイナリ表現10進値
000000000000000000000000000001015(4 + 1)
0000000000000000000000000000110113(8 + 4 + 1)
0000000000000000000000000010110145(32 + 8 + 4 + 1)

JavaScriptの2進数は、2の補数形式で格納されます。

これは、負の数が1を足した数のビット単位のNOTであることを意味します。

バイナリ表現10進値
000000000000000000000000000001015
11111111111111111111111111111011-5
000000000000000000000000000001106
11111111111111111111111111111010-6
0000000000000000000000000010100040
11111111111111111111111111011000-40

10進数から2進数への変換

function dec2bin(dec){
  return (dec >>> 0).toString(2);
}

2進数から10進数への変換

function bin2dec(bin){
  return parseInt(bin, 2).toString(10);
}