ビット単位の計算

整数に対してビット演算を実行し、結果を10進数、16進数、バイナリで表示します。

値を入力して計算をクリックしてください。

仕組み

  1. 2つの数字を入力: 10進数、バイナリ(プレフィックス0b)、または16進数(プレフィックス0x)で操作する値を入力します。
  2. 演算を選択: AND、OR、XOR、NOT、左シフト(<<)、右シフト(>>)から選択します。
  3. 結果を表示: 出力は10進数、バイナリ、16進数で同時に結果を表示し、ビット単位の視覚化が含まれます。

ビット演算計算機を使う理由は?

ビット演算は、システムプログラミング、暗号化、ゲーム開発、グラフィックス、ネットワーキング、組み込みシステムの基本です。AND、OR、XOR、シフトが個々のビットをどのように操作するかを理解することは、フラグの設定/解除、データのパッキング、効率的なアルゴリズムの実装に不可欠です。この計算機は、各ビットがどのように影響を受けるかを正確に確認するために、ビットレベルでの操作を示します。

機能

よくある質問

プログラミングでXORは何のために使われますか?

XOR(^)はビットの反転、シンプルな暗号化/難読化、一時変数なしで変数を交換、パリティチェック、ハッシュの混合に使用されます。ビットが異なる場合は1を返し、同じ場合は0を返します。

<<と>>の違いは?

左シフト(<<)はすべてのビットを左に移動し、2の累乗による乗算と同等です。右シフト(>>)はビットを右に移動し、2の累乗による除算と同等です。算術右シフトは符号ビットを保持します。論理右シフトはゼロで埋めます。

特定のビットを設定または解除するには?

ビットnを設定: value |= (1 << n)。ビットnをクリア: value &= ~(1 << n)。ビットnを反転: value ^= (1 << n)。ビットnが設定されているか確認: (value & (1 << n)) !== 0。

ブール代数からシリコンへ:ビット演算がいかにして普遍的になったか

すべての現代のCPUが実装するビット演算は、80年以上離れて発表された2つの基礎的な論文に由来します。1854年George Booleは「An Investigation of the Laws of Thought」を発表し、二値論理の代数、AND、OR、NOT、およびそれらの恒等式を定義しました。これは哲学的な作業であり、工学的なものではありませんでした。それから1937年、21歳のMITの大学院生Claude Shannonは修士論文「A Symbolic Analysis of Relay and Switching Circuits」を書き、ブール代数が電気的なリレー回路を記述でき、したがってあらゆる論理計算が物理的に実装できることを証明しました。この論文は20世紀の最も重要な修士論文として広く引用され、すべてのデジタル電子工学の基礎です。すべてのCPUが使用する負の数のための二進表現である2の補数は、1962年にBurroughs Corporationによって特許を取得しましたが、IBM 704(1954)および他の初期のマシンですでに使用されていました。IEEE 7541985年に浮動小数点表現を標準化し、すべてのJavaScript Numberがまだ使用しているビットレイアウトを固定しました、binary64では1符号ビット、11指数、52仮数。今日、C言語演算子& | ^ ~ << >>はほぼ直接単一のCPU命令にマップされ、これがビット演算コードが算術的等価物よりも劇的に高速になる理由です。

6つの演算子、ビットレベルで何をするか

ビット演算が実際に給料を稼ぐところ

噛むミス

なぜ2の補数か、そしてビットレベルでは何を意味するか

すべての現代のCPUは2の補数を使用して負の整数を表現する。符号付き8ビットバイトでは、値0から127はバイナリ0000_0000から0111_1111としてエンコードされる。次に−1は1111_1111として、−2は1111_1110として、最大−128は1000_0000としてエンコードされる。理由:このエンコーディングでは、入力が符号付きか符号なしかに関わらず加算は同じように動作し、CPUは別々のadd-signedとadd-unsigned命令を必要としない。非対称性は、負の範囲が正の範囲より1つ大きいことであり(8ビットでは−128から+127)、これが固定幅整数を持つすべての言語でMath.abs(INT_MIN)がオーバーフローする理由。以前の符号-絶対値(符号に1ビット、残りは大きさ)と1の補数エンコーディングは1950-60年代に存在したが、ゼロの2つの表現を持ち、否定のための特別なケースのハードウェアを必要としたため、2の補数に負けた。

その他のよくある質問

なぜ~5250ではなく-6に等しいのか?

2の補数(すべての現代のCPUが使用するエンコーディング)では、正の数のすべてのビットを反転すると-n - 1が得られるから。したがって~5 === -6~0 === -1。符号なし8ビットコンテキストでは、~5と同じビットパターン(バイナリ1111_1010)は250を表す。JavaScriptは結果を符号付き32ビットとして扱うので、-6が表示される。符号なしの解釈を得るには:32ビットで(~5) >>> 0、これは4294967290を与える、または~5 & 0xFFで8ビットにマスクして250を得る。

XORは本当に暗号化なのか?

XORはすべての現代の対称暗号の構成要素ですが、XOR単独は安全な暗号化ではありません。ワンタイムパッド、メッセージと同じ長さの真にランダムなキーとのXOR、正確に一度使用、は情報理論的に解読不可能(Shannon、1949)。キーを再利用したり、メッセージより短いキーを使うと、頻度分析でそれを簡単に破る。AESのような実際の暗号は、短いキーをキーなしの人にワンタイムパッドのように見える擬似ランダムバイトストリームに増幅するために、XOR、拡散、置換を使用。なので「XORで暗号化」は些細な難読化にのみ良い、本当の秘密には決してない。

ビット操作のためにNumberの代わりにBigIntを使用すべきはいつか?

32ビット以上のビット演算精度が必要なときはいつでも。JavaScriptビット演算子は計算前にNumberオペランドを32ビット符号付き整数に切り詰める。64ビットマスクが必要な場合(例:64ビット機能フラグセットの操作、Linux mmapオフセットでの作業、またはSHA-512の実装)、BigIntを使用:0xFFFFFFFFFFFFFFFFn & 0xFFn === 255n。BigIntはNumberより遅く、操作によって~3-10×、なので32ビットが真に少なすぎるケースのために予約する。

数の中の1ビットの数をどう数えるか?

これは人口カウントまたはハミング重み。ほとんどの現代のCPUにはそれのための単一の命令がある(x86のPOPCNT、ARMのVCNT)。JavaScriptには組み込みがないので、ビット-twiddlingクラシックを使用:let c = 0; while (x) { c += x & 1; x >>>= 1; }。またはHacker's Delightの並列SWARトリック:x = x - ((x >> 1) & 0x55555555); x = (x & 0x33333333) + ((x >> 2) & 0x33333333); x = (x + (x >> 4)) & 0x0F0F0F0F; return (x * 0x01010101) >>> 24;、これは32ビット整数のビットを約12サイクルで数える。

この計算機を使用するとき、私のデータはどこかに送信されるか?

いいえ。すべての操作はブラウザのJavaScriptエンジンで実行され、計算中にネットワーク呼び出しは発生しません。DevToolsでネットワークタブを開いてCalculateをクリックすると、アウトバウンドリクエストがゼロ表示される。機密マスク、キー、または独自のビットレイアウト作業に対して安全。

関連ツール

2進数テキスト変換 進数変換ツール Chmod計算ツール 無料ハッシュジェネレーター