最上位セットビット位置計算
この計算機は、正の整数を2進表記したときに最も左にある1の位置を、0から数える方式で求めます。この位置は2を底とする対数の床と完全に一致し、その値が属する2の累乗範囲も示します。一般的なプログラミング言語の安全な数値範囲を超えても精度を失わないよう、整数は10進文字列で入力してください。結果には位置、ビット長、入力値以下で最大の2の累乗が含まれます。
無料で実行
0から始まるビット位置を理解する
2進数の位置は右端から0、1、2の順に数えます。最下位ビットは2の0乗、その左隣は2の1乗を表します。したがって、最上位セットビットとは最も左にある1です。13の2進表記は1101なので、その位置は3です。この計算機は位置3、ビット長4、入力値以下で最大の2の累乗8を返します。この規則により、結果はすべての正の整数でfloor(log2(値))と一致します。値が2の累乗そのものであれば、位置は指数です。たとえば1024は2の10乗なので位置10です。0にはセットされたビットがなく、2を底とする対数も有限ではないため受け付けません。負の整数は符号付き表現と語長によって最上位ビットが変わるため対象外です。
大きな整数も正確に処理する
入力を浮動小数点数ではなく10進文字列として扱います。多くの実行環境では9,007,199,254,740,991を超えると、すべての整数を正確には表せません。計算前の丸めが2の累乗境界を越えると、位置も誤ります。本機能は数字列を任意精度整数として解析し、ビットがなくなるまで右シフトします。シフト回数から1を引いた値が最上位位置です。対数の近似計算を使わないため、2の累乗の直前、ちょうどその値、直後でも正確です。先頭の0は値を変えないので利用できます。一方、符号、小数点、指数表記、区切り文字、16進・2進の接頭辞は利用できません。実行時間を有限に保つため上限は10,000桁ですが、通常の機械語長をはるかに超える整数を扱えます。
サイズ決定と正規化に活用する
最上位ビット位置を使うと、整数の大きさを簡潔に分類できます。位置に1を加えれば、その値を格納するために必要な符号なしビット数の最小値になります。返される2の累乗は現在の2進範囲の下限であり、2倍すれば次の累乗です。バッファークラス、表の大きさ、木構造の階層、固定小数点の尺度、二分アルゴリズムの反復回数を決める際に役立ちます。たとえば256から511まではすべて位置8で、9ビットが必要です。整数の指数だけが必要な場合は、丸め誤差のない2進対数としても使えます。ただし実際の保存形式では、符号用ビット、ヘッダー、可変長グループ、アラインメントなどが追加される場合があります。返されたビット長を絶対値の正確な幅として扱い、その後に採用する形式の規則を適用してください。
活用例
符号なし整数幅を選ぶ
返されたビット長から、正の値に必要な絶対値ビット数の最小値を判断できます。
2の累乗サイズ区分を選ぶ
最上位ビットで値を分類し、バッファーや木の階層、割り当てクラスを選べます。
整数データを正規化する
固定小数点計算、符号化、範囲比較の前に、位置を正確な尺度の指数として使えます。
よくある質問
位置は0から始まりますか?
はい。1は位置0、2は位置1、8は位置3です。
0を入力できないのはなぜですか?
0にはセットされたビットがないため最上位位置が存在せず、floor(log2(0))も有限ではありません。
JavaScriptの安全な整数範囲より大きい値も扱えますか?
はい。10進文字列を任意精度整数として処理し、公開上限の10,000桁まで対応します。
負の整数に対応していますか?
いいえ。負数の最上位ビットは、選択した符号付き符号化と固定語長によって異なります。
APIの利用料金はいくらですか?
APIは1回$0.002です。このページのブラウザー計算機は無料で利用できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev/highest-set-bit \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"value":"12345678901234567890"}'const res = await fetch("https://api.kit.forhosting.com/dev/highest-set-bit", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"value": "12345678901234567890"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/highest-set-bit",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"value": "12345678901234567890"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/highest-set-bit", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"value":"12345678901234567890"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"value":"12345678901234567890"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/highest-set-bit", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"value": "12345678901234567890"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.highest_set_bit",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_value_chars | 10000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |