2の補数バイナリ計算
固定幅で双方向に変換できます。8ビットの-18は11101110で、11101110を8ビットとして読むと-18に戻ります。幅は2から53ビットまで選べ、黙って桁があふれることはありません。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
2の補数は、プロセッサー、ファイル形式、レジスター、ネットワークプロトコルで符号付き整数を固定幅で表す標準的な方式です。この変換機能は双方向に対応しています。整数とビット幅を指定すると正確なバイナリパターンを取得でき、バイナリパターンと幅を指定すると符号付き整数を復元できます。範囲外の値を暗黙に折り返さず、すべての入力を検証します。
変換前にビット幅をお選びください
2の補数の値は、幅が分かって初めて意味が確定します。同じ末尾のビットでも、8ビット、16ビット、32ビットのワードとして解釈すると異なる値になる場合があります。選択した幅の最上位ビットが符号を示すためです。
まず2から53ビットの幅を選び、次に変換方向を指定してください。整数からバイナリへ変換する場合は、符号付き整数を入力します。変換機能は、負の2^(bits-1)から2^(bits-1)-1までの有効範囲を検査します。
したがって、8ビットでは-128から127までを扱えます。整数が範囲外の場合、上位ビットを捨てたり誤解を招く折り返しを行ったりせず、入力エラーを返します。この厳密な動作は、レジスター定義、シリアライザーの境界、演習問題、データ配置の確認に役立ちます。
成功時の結果には常に指定数の桁が含まれます。非負値には先頭のゼロが付き、負値には固定幅表現に必要な先頭の1が付きます。
エンコードとデコードの仕組み
非負の整数をエンコードする場合は、通常の2進表記を使い、選択した幅に達するまで左側をゼロで埋めます。負の整数では、値に2^bitsを加え、その非負の剰余をバイナリで表します。この剰余による定義は、正の絶対値の全ビットを反転して1を加える手計算と同じ結果になりますが、例外を避けて数学を直接表現できます。
デコードでは逆の規則を適用します。最初にビット列を符号なしの量として読みます。先頭ビットが0なら、その量がそのまま符号付きの答えです。
先頭が1なら、2^bitsを引いて負の値を復元します。バイナリ入力には0と1だけを使用し、宣言した文字数と完全に一致させてください。幅を推測せず、デコード時に埋め合わせを追加せず、余分な桁も切り捨てません。
この仕様により往復変換を予測できます。受理された各整数は1つの正確なパターンになり、同じ幅でデコードすると元の整数へ戻ります。
実際の作業で正確な表現をご利用ください
ファームウェア開発者は、センサーの差分、状態レジスター、プロトコル例を文書へ記載する前に確認できます。アプリケーション開発者は、符号付きバイトのパッキング用に基準データを作成し、境界動作を確認し、予想外に大きな符号なし値が実際には負の2の補数なのかを調査できます。
学習者は、符号拡張を隠す短縮バイナリではなく、固定幅の正確なパターンを見ながら計算を確認できます。計算は決定論的で、解析処理内だけで実行され、モデル、外部サービス、乱数、時計を使用しません。調査対象の保存形式と宣言幅を必ず一致させてください。
活用例
符号付きレジスター値の確認
文書化された10進数の境界値や例を正確な幅のビットパターンへ変換し、ハードウェアやファームウェアのレビューに使用できます。
シリアライザー用テストデータの作成
正値、負値、最小値、最大値、ゼロについて安定したバイナリの期待値を生成できます。
よくある質問
指定した幅にはどの範囲が収まりますか?
wビット幅では、-2^(w-1)から2^(w-1)-1までの符号付き整数を格納できます。
バイナリ入力を幅と完全に一致させる必要があるのはなぜですか?
その幅の先頭ビットが符号を決めるためです。幅の推測や暗黙の埋め合わせは結果を変える可能性があります。
整数が幅に収まらない場合はどうなりますか?
折り返したり切り詰めたりせず、分かりやすいエラーになります。たとえば8ビットでは-128から127までしか受け付けず、範囲外の値は上位ビットを失う前に拒否されます。
負の数はどのように符号化されますか?
値に2の幅乗を足し、その結果を2進数で書きます。正の数の全ビットを反転して1を足す手順と同じ結果になり、そのため8ビットの-18は11101110になります。
ビット列を数に戻すにはどうしますか?
まずビット列を符号なしの数として読みます。左端のビットが0ならそれが答えで、1なら2の幅乗を引きます。こうして8ビットの11101110は-18に戻ります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev2/two-complement-convert \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"mode":"integer_to_binary","bits":8,"integer":-18,"binary":"11101110"}'const res = await fetch("https://api.kit.forhosting.com/dev2/two-complement-convert", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"mode": "integer_to_binary",
"bits": 8,
"integer": -18,
"binary": "11101110"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/two-complement-convert",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"mode": "integer_to_binary",
"bits": 8,
"integer": -18,
"binary": "11101110"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/two-complement-convert", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"mode":"integer_to_binary","bits":8,"integer":-18,"binary":"11101110"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"mode":"integer_to_binary","bits":8,"integer":-18,"binary":"11101110"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/two-complement-convert", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"mode": "integer_to_binary",
"bits": 8,
"integer": -18,
"binary": "11101110"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.two_complement_convert",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
min_bits | 2 |
max_bits | 53 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
そのため、1つの符号ビットでフィールド全体の意味が変わる場面でも、学習、デバッグ、文書作成、自動テスト用データの生成に安心してご利用いただけます。
実際の作業で正確な表現をご利用ください
この機能は、人が読める10進値と低水準の符号付きフィールドを比較する場面で役立ちます。自動化する場合は、モード、幅、対応する整数またはバイナリのフィールドをAPIへ送信してください。成功した各項目には公開基本料金$0.002が適用されます。プロトコルが12ビットのフィールドを定義している場合は、先頭の0または1を含む12桁すべてをデコードします。
連携の活用例
プロトコルキャプチャーのデコード
固定幅のバイナリフィールドを、プロトコル仕様が意図する符号付き整数として解釈できます。
技術的な質問
整数が幅に収まらない場合はどうなりますか?
許容範囲を示すinvalid_inputエラーになります。値を暗黙に折り返したり切り捨てたりすることはありません。
双方向に変換できますか?
はい。integer_to_binaryで符号付き整数をエンコードし、binary_to_integerで固定幅パターンをデコードします。
APIリクエストの料金はいくらですか?
成功したAPI項目には公開基本料金$0.002が適用されます。無効な入力は結果を生成する前に拒否されます。