符号絶対値表現計算機:2進数の符号化と復号
この符号絶対値表現計算機は、符号付き10進整数を固定幅の2進ビット列へ変換し、そのビット列を数値へ戻します。2の補数とは異なり、最上位ビットを符号だけに割り当て、残りの全ビットで絶対値を表します。操作を選び、値と合計ビット幅を指定すると、符号ビット、絶対値ビット、数値としての絶対値、完全なビット列、復号値を確認できます。この方式に固有の負のゼロ表現も結果で明示します。
無料で実行
符号付き整数を符号化する方法
符号化を選択し、値の欄に10進整数を入力して、2から53ビットまでの合計幅を指定します。計算機は最初に符号と絶対値を分離します。負の入力では先頭の符号ビットが1になり、ゼロおよび正の入力では0になります。次に絶対値を2進数へ変換し、選択した幅よりちょうど1ビット少ない長さになるまで左側をゼロで埋めます。符号ビットとゼロ埋めした絶対値を連結したものが最終的なビット列です。たとえば、絶対値37は7ビットで0100101なので、8ビットの-37は10100101になります。符号用の位置を数値範囲の拡張には利用できません。幅をwとすると、最大の絶対値は2のwマイナス1乗から、さらに1を引いた値です。この対称範囲を超える入力は、切り捨てたり循環させたり、通知せずに変更したりせず、エラーとして扱います。そのため、授業の課題、技術文書、テストベクトルにも確実に利用できます。
2進ビット列を復号する方法
復号を選択し、指定したビット幅と完全に同じ桁数の2進値を入力します。先頭のゼロにも意味があるため、ビット列は10進数ではなく文字列として受け取ります。最初の桁だけを符号として解釈し、0は非負、1は負を示します。残りの桁は符号なし2進数の絶対値として読み取ります。その絶対値がゼロでなければ、符号を適用して復号後の10進整数を求めます。出力には元のビット列を保持し、sign_bit、magnitude_bits、magnitudeも分けて示すため、各段階を個別に確認できます。たとえば10100101は、符号ビット1、絶対値ビット0100101、絶対値37、10進値-37です。宣言した幅と実際のビット列の長さは一致していなければなりません。空白、0bのような接頭辞、区切り文字、0と1以外の数字は拒否されるため、曖昧な入力から一見正しそうな結果が生成されることはありません。
表現範囲と負のゼロを理解する
符号絶対値表現は符号を別に保存するため読みやすい一方、2の補数とは異なる性質があります。利用できる数値範囲は対称で、8ビットの通常値は-127から127までであり、-128から127までではありません。また、数値ゼロには2種類の符号化があります。すべてのビットが0なら正のゼロ、符号ビットが1で絶対値ビットがすべて0なら負のゼロです。どちらも数値としては0に復号されるため、受け取った表現がどちらかをnegative_zeroフィールドで明示します。この違いは、歴史的なコンピューター形式、浮動小数点数の符号概念、教材、ビット列そのものが重要なハードウェア演習を調べる際に役立ちます。本計算機が符号絶対値表現と2の補数を暗黙に変換することはありません。元のシステムが別の符号付き表現を使う場合は、ビットを解釈する前に方式を特定してください。結果を正確に比較するには、一連の計算で同じビット幅を維持します。ゼロ埋めは完全なビット列を変えますが、絶対値や復号整数は変えません。
活用例
デジタル論理の演習を確認
指定幅での符号ビット、絶対値のゼロ埋め、表現可能範囲、復号結果を検算できます。
再現可能なテストベクトルを作成
エンコーダーやデコーダーの試験用に、正確なビット列と構造化された中間値を生成します。
旧式の数値形式を調査
正のゼロと負のゼロの重要な違いを保ったまま、保存済みのビット列を解釈します。
よくある質問
APIでの1回の計算料金はいくらですか?
APIリクエスト1回の料金は$0.002です。同じ再現可能な計算をブラウザーで無料でも実行できます。
対応しているビット幅はいくつですか?
符号ビットを含む合計幅として、2から53ビットまでを指定できます。
2の補数より範囲が狭いのはなぜですか?
1ビットを符号専用にし、残りを絶対値に使うため、8ビットで表せる最大の絶対値は127です。
負のゼロはどのように扱われますか?
符号ビットが1で絶対値がすべて0のビット列は数値0に復号され、negative_zeroが真になります。
0b接頭辞や空白を含められますか?
いいえ。復号値には、接頭辞、空白、区切り文字を入れず、指定した桁数と完全に同じ数の2進数字を入力してください。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/elec/signed-magnitude \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"operation":"encode","value":"-37","bit_width":8}'const res = await fetch("https://api.kit.forhosting.com/elec/signed-magnitude", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"operation": "encode",
"value": "-37",
"bit_width": 8
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/elec/signed-magnitude",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"operation": "encode",
"value": "-37",
"bit_width": 8
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/elec/signed-magnitude", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"operation":"encode","value":"-37","bit_width":8}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"operation":"encode","value":"-37","bit_width":8}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/elec/signed-magnitude", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"operation": "encode",
"value": "-37",
"bit_width": 8
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "elec.signed_magnitude",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |