ビット演算計算機
60 AND 13は12、60 OR 13は61、60 XOR 13は49です。2つの32ビット整数をAND、OR、XORやシフトで組み合わせると、C、Java、JavaScriptと同じ結果が、2つの数と並んで表示されます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- A
- 60
- B
- 13
- Op
- Xor
- 結果
- 49
C、Java、JavaScript と同じ 2 の補数セマンティクスに従うため、返される数値はお客様のコードが計算する結果と一致します。浮動小数点の丸めも予期しない動作もありません。両方のオペランドは結果とともに返され、真の 32 ビット整数でない入力は、黙って切り捨てられるのではなく、明確なエラーとして課金なしで拒否されます。
ビット演算が実際に行うこと
ビット演算計算機は、整数の 10 進表記ではなく 2 進表現に対して処理を行います。たとえば 60 AND 13 を計算すると、マシンは両方の数値のビット(111100 と 001101)を並べ、両方のオペランドに 1 がある位置だけに 1 を残し、結果は 12 になります。
OR はどちらかに 1 があれば 1 を残すので 61、XOR はビットが異なる位置だけに 1 を残すので 49 になります。結果は 2 つの入力だけに依存するため、ビット演算は完全に決定的です。同じ整数のペアは、32 ビットの 2 の補数整数を使うどのマシン・どの言語でも常に同じ答えを返します。
2 つの整数と演算名を送れば、お客様のコードが計算するのと同じ整数が返され、両オペランドも一緒に返されるため、ログや監査証跡でも応答が自己記述的になります。
シフト、符号ビット、32 ビットセマンティクス
シフトは、第 1 オペランドのすべてのビットを、第 2 オペランドで指定した量だけ左右に移動します。n ビットの左シフトは 2 の n 乗を掛けるのと同じで、上位からはみ出したビットは破棄されます。小さな 2 のべき乗を扱う定番の高速手法です。
右シフトには 2 種類あり、その違いは重要です。算術右シフト shr は空いた位置に符号ビットをコピーするため、負の数は負のままです。たとえば -8 を 1 ビット右にシフトすると -4 になります。
論理右シフト ushr は代わりに 0 を挿入し、値を符号なしとして再解釈します。JavaScript と Java の慣例に従い、シフト量の下位 5 ビットだけが使われるため、33 シフトは 1 シフトと同じです。
両方のオペランドはビットに触れる前に真の 32 ビット整数として検証され、範囲外や整数でない入力は、警告なしに切り捨てられるのではなく拒否されます。
実際の使い方
2 つの整数 a と b、そして演算 op(and、or、xor、shl、shr、ushr のいずれか)です。応答は演算と両オペランドを整数の結果と並べて返すため、呼び出しを再構築せずに保存・記録できます。エッジで動くのと同じコードが、このページではブラウザ内で無料で動作します。
信頼できないデータを取り込むパイプラインに直接組み込んでも安全です。同じ入力は常に同じ結果を返し、お客様のデータがサーバーに残ることはありません。
活用例
言語間でのシフト演算の検証
低レベルコードを移植する前に、符号付き右シフトや論理シフトの結果を確認し、符号のバグが本番に出るのを防ぎます。
よくある質問
対応している演算は何ですか?
AND、OR、XOR、左シフト(shl)、算術右シフト(shr)、論理右シフト(ushr)です。
受け付ける入力範囲は?
両オペランドとも符号付き 32 ビット範囲(-2147483648 〜 2147483647)の整数である必要があります。
シフトで負の数はどう扱われますか?
shr は符号ビットをコピーするため負の値は負のままです。ushr は 0 で埋め、値を符号なしとして扱います。どちらも 32 ビットの 2 の補数セマンティクスに従います。
31 を超えるシフトをするとどうなりますか?
JavaScript や Java と同様、シフト量の下位 5 ビットだけが使われます。33 シフトは 1 シフトと同じです。
特定のフラグのビットが立っているか確かめるには?
そのビットだけを1にしたマスクと値をANDで組み合わせます。結果が0でなければ、そのフラグは立っています。同じ考え方で、ORならフラグを立て、XORなら反転できます。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/math/bitwise \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"a":60,"b":13}'const res = await fetch("https://api.kit.forhosting.com/math/bitwise", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"a": 60,
"b": 13
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/bitwise",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"a": 60,
"b": 13
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/bitwise", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"a":60,"b":13}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"a":60,"b":13}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/bitwise", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"a": 60,
"b": 13
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.bitwise",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
このビット演算 API は、AND、OR、XOR、左シフト、算術右シフト、論理右シフトのいずれかのビット演算を 2 つの 32 ビット整数に適用し、正確な整数の結果を返します。
ビット演算が実際に行うこと
これら 3 つの演算は、フラグフィールド、権限マスク、サブネット、ハッシュ関数、圧縮フォーマットの基本要素です。これがまさにこのエンドポイントの約束です。
シフト、符号ビット、32 ビットセマンティクス
パックされたワードからビットフィールドを取り出すときに必要な動作です。
実際のエンドポイントの使い方
リクエストは 3 つのフィールドです。つまり、マスクを試作したりシフトを手で確認したりするのは無料で、自動化したときだけ API 経由で $0.002/リクエストをお支払いいただきます。オペランドが欠けている、整数でない、符号付き 32 ビット範囲外のいずれかの場合、エンドポイントは invalid_input エラーを返し、その呼び出しは課金されません。リクエスト間に状態はなく、何も保存されません。
連携の活用例
パックされたフラグと権限マスクのデコード
AND、OR、XOR で、ビットが立っているかの確認、フラグのクリア、ロールフィールドの権限ビットの結合が、使い捨てスクリプトなしで行えます。
2 進表現の教育とデバッグ
学生やチームメイトに、2 つの整数がビットごとにどう結合されるかを、ブラウザと API で同じ結果とともに正確に示せます。
技術的な質問
料金はいくらですか?
$0.002/リクエストです。このページでは、まったく同じコードをブラウザで無料実行できます。
何か保存されますか?
いいえ。各リクエストは計算後に破棄され、呼び出し間に状態はありません。