ビット演算
変換処理はすべてブラウザ内で完結します。データは送信されません
10 種類のビット演算を 1 つのツールにまとめているのは、入出力の形がまったく同じで違うのは演算子だけだからです —— 10 ページに分けると内容がほぼ同一になり、検索でも互いに薄め合います。 なぜ言語標準のビット演算子を使わないのか。 JavaScript の `&` `|` `^` `~` `<<` `>>` はまず 32 ビット符号付き整数に変換します:`1 << 31` は `-2147483648`、`0xFFFFFFFF` は `-1`、32 ビットを超える値は黙って切り詰められ、しかもエラーは出ません。ビット演算を必要とする場面で扱うのは 64 ビットのマスク、ハッシュの断片、UUID から取り出した整数などで、それらはすべて誤った結果になります。ここでは全体を通して BigInt を使うため、`<<` はいくらでもシフトでき、`&` が突然負になることもありません。 ビット幅は剰余と表示の口径です。 32 ビットを選ぶと、オペランドはまず 2³² で剰余を取られ(`-1` はすべて 1 になり、これが 2 の補数の意味です)、結果は 32 ビットにゼロ埋めして表示されます。「無制限」ではどちらも行わず、`~0` は `-1` になります —— 数学的には正しいのですが、マスクを扱う人には望ましくないため、既定は 32 ビットです。
機能
- 10 種類:AND・OR・XOR・XNOR・NAND・NOR・NOT・左シフト・右シフト・ビット逆順
- 結果は 10 進・2 進・16 進・ビット数を同時に表示し、行ごとにコピーできます
- 入力は 0b / 0o / 0x と 10 進数に対応。`_` と空白は区切りとしてそのまま貼れます
- ビット幅は 8 / 16 / 32 / 64、または「無制限」(BigInt の任意精度)
- ビット幅を指定すると先に 2 の補数で剰余を取ります:8 ビットの `-1` は 255 になります
- 左シフトが負の数にオーバーフローしません(JavaScript の `1 << 31` は負になります)
- 1 行に 1 オペランドなので、同じマスクを一覧全体に適用できます
- 64 ビットのマスクや巨大な整数でも正確。浮動小数点は一切通りません
使い方
- 演算したい数を 1 行に 1 つ貼り付けます(0b / 0o / 0x に対応)
- 演算とビット幅を選び、2 つ目のオペランドを入力します
- 結果は即座に更新されます。行のコピーボタンで値を取り出します
よくある質問
- コードで計算した結果と違うのはなぜですか?
- 多くの場合、言語のビット演算子は 32 ビット符号付き整数で動作するためです。典型的な違いは 3 つあります。`1 << 31` は向こうでは `-2147483648`、ここでは `2147483648`。`0xFFFFFFFF` は向こうでは `-1` として読まれます。32 ビットを超えるオペランドは黙って切り詰められます。ビット幅を「無制限」にすれば切り詰めのない結果が見られ、32 ビットにすれば符号なし表示を除いて言語の挙動と一致します。
- ビット幅はどれを選べばよいですか?
- 対象環境のデータ幅に合わせてください。C の int や JavaScript のビット演算なら 32 ビット。uint8 配列、RGB チャンネル、プロトコルのフィールドなら 8 か 16 ビット。64 ビットのマスクやハッシュなら 64 ビット。数学的な答えだけ知りたいなら「無制限」です。ビット幅が影響するのは剰余とゼロ埋めの 2 段階だけで、演算そのものの正しさには関わりません。
- 右シフトは算術ですか、論理ですか?
- 論理(符号なし)です。ビット幅を指定するとオペランドはすでに剰余を取られており、すべて非負なので符号拡張するものがありません。したがって `0xFFFFFFFF >> 4` は `0x0FFFFFFF` になります。算術シフトが必要な場合(負の数の符号ビットを保つ)はビット幅を「無制限」にしてください。そこでは BigInt の `>>` が負の数に対して算術シフトになります。
関連ツール
基数変換
変換2・8・10・16・36・64 進数を相互変換。6 通りの結果を一度に表示し、19 桁のスノーフレーク ID も正確に扱えます。すべてブラウザ内で処理します。
IP 整数変換
WebIP アドレスと整数を相互変換します。ドット区切り・符号なし・符号付き・16 進数・2 進数、IPv6 は 128 ビットで正確に。
基数の四則演算
変換2・8・10・16 進数で四則演算を行います。BigInt なので桁あふれも切り詰めもなく、除算では商と余りを併記します。
タイムスタンプ変換
変換Unix タイムスタンプと日時を相互変換。秒〜ナノ秒を桁数で判別し、小数・負数・Windows FILETIME にも対応します。
日付計算
変換2つの日付の差が何日かを計算し、日・週・月の加減算もできます。日付はカレンダーから選ぶか貼り付けで。終了日を空にすると今日と比較。
Cron 解析
変換cron 式をフィールドごとに日本語で説明し、次回と前回の実行時刻を計算します。絶対に実行されない式はその場で理由を示します。すべてブラウザ内で処理します。