🧰 UtlKit

ビット演算:12 と 10 の AND は 8、OR は 14、XOR は 6、シフトと NOT、符号ビットと 5 進の出力を解説

32 ビット語上の 7 種のビット演算:AND・OR・XOR・NOT A・NOT B・左右シフト、具体数字付き(12 AND 10 = 8)、符号を保つ算術右シフト、シフト量の 31 マスク、5 つの基数を同時印刷、すべてブラウザでローカル。

ビット演算が扱うのは、あなたが打った十進数ではなく、マシンが実際に保管する 32 ビット語だ。ビット演算計算機は 2 つの数を受け取り、7 種の演算の 1 つ(AND、OR、XOR、NOT A、NOT B、左シフト、右シフト)を当て、結果を 5 つの基数で一度に印刷する:十進、16 進、8 ビット 2 進、32 ビット 2 進、8 進。送信は無い。演算はすべてブラウザの JavaScript 整数の上で動く。本文は具体数字で各演算を歩き、シフトに符号ビットが忍び込む場所、AND をバイト単位のコードの主役にするマスクを示す。

1 つの 32 ビット語上の 7 種の演算

3 種の 2 元演算は各ビット位置に作用する。12 は 0b1100、10 は 0b1010:AND は両方に 1 がある位だけ残すので 12 AND 10 = 0b1000 = 8、OR は少なくとも一方に 1 がある位を残すので 12 OR 10 = 0b1110 = 14、XOR はちょうど一方だけ 1 の位を残すので 12 XOR 10 = 0b0110 = 6。2 つの NOT ボタンは片方の演算子の全ビットを反転させる:5 は 0b0101、その反転形 0b1010 は -6 の 2 の補数としての読みで、32 ビットの 16 進では 0xFFFFFFFA と印刷される。2 つのシフトはビットを動かす:1 を 4 左シフトすると 16、1024 を 2 右シフトすると 256。ビットに触れずに同じ値を別の基数にしたいとき、基数変換が純粋な変換をする。

3 つの入力基数、1 つの 32 ビット値

各フィールドは素の十進、0x 付きの 16 進、0b 付きの 2 進を受け入れ、パーサーは 3 つの書式の背後に 1 つの 32 ビット整数を保つ。0xFF AND 0x0F = 15 は、あらゆるバイトプロトコルで見かける下位 4 ビットマスクだ。入力のつど、ツールは各演算子を 4 ビットずつグループ化した 32 ビットの 2 進文字列で返し、結果パネルは下位 8 ビットを点灯した 8 つの箱で描く:255 は 8 つ全部が点灯し、16 は 1 つだけ。そのグループを目で読むことは、テキストを 2 進コードに変換するのと同じ技能で、テキスト ⇄ バイナリ変換が 1 文字ずつそれを実践する。

シフト、符号ビット、31 へのマスク

右シフトは算術シフト:動くたびに符号ビットを複製するので、-8 は 0xFFFFFFF8、-8 を 1 右シフトすると 0xFFFFFFFC = -4 になり、0x7FFFFFFC にはならない。左シフトは右から 0 を埋めるが、31 位目は 32 ビット語の符号ビットなので、1 を 30 左シフトすると 1073741824(0x40000000)でまだ正数、1 を 31 左シフトすると -2147483648、最小の負数になる。シフト量は先に 0 から 31 へマスクされる:1 を 33 左シフトは 1 を 1 左シフトとまったく同じで、2 を返す。エラーもオーバーフローの案内も無い。語から 1 バイトを抜くのが日常パターン:0xFF00 を 8 右シフトすると 255。バイト単位の 16 進 ⇄ UTF-8 変換は、同一ビューの兄弟、Hex/UTF-8/Base64変換の領分だ。

5 つの基数を一度に見る

結果パネルは同じ値を 5 つの書き方で出す:十進、16 進(大文字、0x 付き)、8 ビット 2 進、32 ビット 2 進、8 進。255 は 255、0xFF、0b1111 1111、32 ビットでは上 24 ビットが 0 の列、そして 8 進の 0o377 と印刷される。8 進の列は飾りではない:ファイル権限の 3 桁は 8 進で、各桁がちょうど 3 ビットの権限グループだから、0o755 は 9 ビットの 0b111101101、つまり rwxr-xr-x、十進では 493 だ。Chmod パーミッション計算機はその 3 桁を所有者・グループ・その他 3 行に広げる、まさにこの列のビット級ビュー。

マスク:AND の日常の仕事

小さい数との AND は下位ビットだけを残す:0xFF AND 0x0F = 15、-1 AND 7 = 7、-1 は全部 1 だから。個々のフラグビットの検査は 値 AND (1 を n 左シフト):答えが 0 でなければ n 位目は 1。XOR は自分の逆演算なので、1 行の暗号になる:65 XOR 42 = 107、107 XOR 42 = 65、同じ鍵で 2 回 XOR するとバイトはそのまま戻る。15 は 3 つのコンパクトな基数で 0b1111、0o17、0xF。バイトを文字へ詰める Base64 のような符号化は、まさにこの 6 ビットグループの上に座り、Base64 エンコーダ/デコーダがその対応表を示す。

同じ 0 と 1 が、どこにも現れる

ビット演算は、バイトで数えるすべてのものの上を走る小さな層だ。テキスト ⇄ 2 変換ガイドは文字を 8 ビットグループへ手作業で割る;ハッシュ生成はちょうどこれらの演算——AND、OR、XOR、回転——でバッファ全体を 32 ビットの摘要まで混ぜる。どの基数で値を読むべきか迷ったら、ビットから始めよう:このサイトの全基数、ここでの 8 ビットの箱から 8 進の権限桁まで、は同じ 32 ビット語が別の記法を着たものだ。計算機はその語を抽象では無くする:入力 2 つ、演算 1 つ、読み方 5 つ。

関連ツール

よくある質問

ビット演算計算機は何の演算に対応していますか?

7 種:AND・OR・XOR は 2 つの数に働き、NOT A と NOT B は片方の演算子を反転、左シフトと右シフトは片方の数のビットをもう一方が示す量だけ動かす。すべて 32 ビット整数で動いて、結果は十進・16 進・8 ビット 2 進・32 ビット 2 進・8 進を同時に印刷する。

入力はどのように読み取られますか?

各フィールドは素の十進、0x 付きの 16 進、0b 付きの 2 進を受け入れ、すべて同じ 32 ビット整数に解析される。入力のつど、ツールは演算子を 4 ビットずつグループ化した 32 ビットの 2 進文字列で返すので、演算を選ぶ前にビットを確認できる。

31 より多くシフトするとどうなりますか?

シフト量は先に 0 から 31 へマスクされてから適用されるので、1 を 33 左シフトは 1 を 1 左シフトとまったく同じで、2 を返す。エラーもオーバーフローの案内も無い;量の余分なビットは単純に捨てられる。

なぜ -8 を 1 右シフトすると -4 になるのですか?

右シフトは算術シフトだからで、語が動くと符号ビットが複製される。-8 は 0xFFFFFFF8;算術 1 ステップで 0xFFFFFFFC、つまり -4 になる。論理シフトなら 0x7FFFFFFC、大きな正数になるが、このツールは符号を保つ。

計算機は数字をアップロードしますか?

しない。入力はブラウザに残り、7 種の演算は JavaScript 整数の上で動き、5 つの結果基数はすべてローカルで計算される。タブを閉じればすべて消える;保存も送信も無い。

関連記事