
16進数と
文 ゆめさく公開 更新
計算の途中を見る (10進数 と 16進数 の間)
10進数 255 を 16進数 に直す筆算です。16 で割り続け、商が 0 になるまでの余りを、下から上へ読むと答えになります。
| 割られる数 | ÷ 16 | 商 | 余り (下から読む) |
|---|---|---|---|
| 255 | ÷ 16 | 15 | F |
| 15 | ÷ 16 | 0 | F |
16進数 FF を10進数に直す、位の重みの内訳です。各桁の値に、その桁の重み (16 の累乗) を掛けて、全部を足し合わせます。
| 桁 | 重み (16^n) | 桁 × 重み |
|---|---|---|
| F | 16^1 = 16 | 240 |
| F | 16^0 = 1 | 15 |
合計 255
使い方
- 変換したい数を、
10進数・2進数・8進数・16進数の どれか 1つの 欄に 入力します。 残り 3つの 欄が 自動で 計算されます。 - 負の
数や 特定の ビット幅で 考えたい ときは 「符号の 扱い」を 2の 補数に 切り 替え、 ビット幅を 選びます。 - なぜ
その 答えに なるかを 確かめたい ときは 「計算の 途中を 見る」を 開き、 割り算の 筆算・ 小数部の 計算・2の 補数の 手順・位の 重みの 内訳を 読みます。 - 値の
右の 「コピー」で プログラムや 資料に そのまま 貼り付けられます。
この 16進数変換のしくみ
このBigIntで持つので、
整数部は 割り算の 繰り返しで求める
10進数を
小数部は 分数のまま 計算し、 循環を検出する
多くの
負の 数は 2の 補数で、 ビット幅を 決めて扱う
MDN Web Docs のNumber.prototype.toString()のページは、int.to_bytes()も、
2進数4桁と 16進数1桁の対応
16進数は
| 10進数 | 16進数 | 2進数 (4桁) | 8進数 |
|---|---|---|---|
| 0 | 0 | 0000 | 0 |
| 1 | 1 | 0001 | 1 |
| 2 | 2 | 0010 | 2 |
| 3 | 3 | 0011 | 3 |
| 4 | 4 | 0100 | 4 |
| 5 | 5 | 0101 | 5 |
| 6 | 6 | 0110 | 6 |
| 7 | 7 | 0111 | 7 |
| 8 | 8 | 1000 | 10 |
| 9 | 9 | 1001 | 11 |
| 10 | A | 1010 | 12 |
| 11 | B | 1011 | 13 |
| 12 | C | 1100 | 14 |
| 13 | D | 1101 | 15 |
| 14 | E | 1110 | 16 |
| 15 | F | 1111 | 17 |
0〜255 の一覧を開く
2の 補数の求め方
ビット幅を
ビット列 = 2^w + x (xが
たとえば
| 10進数 | 2進数 (8ビット) | 16進数 (8ビット) |
|---|---|---|
| 0 | 00000000 | 00 |
| 1 | 00000001 | 01 |
| 127 | 01111111 | 7F |
| -1 | 11111111 | FF |
| -2 | 11111110 | FE |
| -128 | 10000000 | 80 |
8ビットの
コードで書くなら
実際に
hex_convert.py
# 10進数 -> 16進数、16進数 -> 10進数
n = 255
hex_text = hex(n)
int_value = int("ff", 16)
print(hex_text) # '0xff'
print(int_value) # 255
# 2の補数 (8ビット) で -1 を16進数にする
width = 8
value = -1
bits = value & ((1 << width) - 1)
text = f"{bits:0{width // 4}x}"
print(text) # 'ff'hex-convert.js
// 10進数 -> 16進数、16進数 -> 10進数
const n = 255;
const hexText = n.toString(16);
const intValue = parseInt("ff", 16);
console.log(hexText); // 'ff'
console.log(intValue); // 255
// BigInt なら 0x リテラルをそのまま読める
const big = BigInt("0xff").toString(2);
console.log(big); // '11111111'
// 2の補数 (8ビット) で -1 を16進数にする
const width = 8n;
const value = -1n;
const bits = value & ((1n << width) - 1n);
console.log(bits.toString(16)); // 'ff'よく ある間違い
ゆめさくの
- 各桁の
数字を そのまま 足してしまい、 桁の 重みを 無視する 間違いです。 16進数の 2Dを 10進数に する とき、 2+13=15と するのは 誤りで、 正しくは 2×16 + 13×1 = 45です。 - 16進数の
重み (16の 累乗) を、 10進数の 感覚で 重み10と 取り 違える 間違いです。 - 桁の
順番を 逆に 数え、 1の 位と 16の 位を 入れ替えてしまう 間違いです。 parseInt("08", 8)のように、その 基数で 使えない 桁 (8進数の 8や 9) を 含めると、 言語に よっては 途中までしか読まずに 別の 値に なります。 この 道具は、 使えない 文字が 1つでも あると エラーで 知らせ、 黙って 途中までの 値を 返すことはしません。 - 2の
補数の ビット列を、 符号つきの 10進数だと 思って 桁ごとに 読み替えてしまう 間違いです。 ビット列の 最上位ビットが 1なら、 2^wを 引く 計算が 別に 必要です。
よくある質問
16進数変換とは、 何を する 道具ですか
10進数・2進数・8進数・16進数の
16進数とは何ですか
0から
16進数は どのような 場面で 使われますか
色の
FF は 10進数で いくつですか
255です。
16進数と 10進数は どう 変換しますか
10進数から
16進数の 小数点以下は どう 変換しますか
小数部は
マイナスの 16進数は どう 表しますか
数式や
FF が -1 に なるのは なぜですか
2の
JavaScriptや Pythonの 16進数リテラルの 0xは 何を 意味しますか
0xは
文字列 (テキスト) を 16進数に したい 時は どうしますか
文字は、
この 道具の 計算は、 通信や 保存をしますか
しません。
何桁くらいの 大きな 数まで 変換できますか
整数部は
16進数の 桁区切りは、 どこに 入りますか
「桁区切りを
基本情報技術者試験の 対策にも 使えますか
ゆめさくの
書き手と 日付と出典
- 書き手
- ゆめさく
- 公開日
- 更新日
MDN Web Docs Number.prototype.toString()
MDN Web Docs の英語版 (2025年7月10日更新) ・ に本文を読んで確かめました
radixに
2から 36までの 整数を 指定できる こと、 10を 超える 桁には aから zの 文字を 使う こと、 数値が 負の ときは 符号を 保ったまま 出力し、 radixが 2であっても 2の 補数ではなく 符号付きの 文字列に なることが 明記されていること。 MDN Web Docs の英語版 (2026年9月2日更新) ・ に本文を読んで確かめました
BigIntは
Numberの 安全な 範囲 (MAX_SAFE_INTEGERなど ) を 超えて 表せない 整数値を 表すための 型で、 すべての BigInt値は 符号つきである ことが 書かれている こと。 「桁数に 上限が 無い」とは 書かれていないので、 本文では その 言い方を していない。 MDN Web Docs JavaScript Lexical grammar (Numeric literals)
MDN Web Docs の英語版 ・ に本文を読んで確かめました
2進数リテラルは
0bまたは 0B、 8進数リテラルは 0oまたは 0O、 16進数リテラルは 0xまたは 0Xの 接頭辞に 続けて、 それぞれの 基数で 使える 文字が 続く 形と 定められている こと。 BigIntリテラルは 桁数に 上限の ない 整数 (arbitrary precision) として 扱われると 書かれていること。 Python 3 ドキュメント int.to_bytes() / int.from_bytes()
Python 3 の英語版 ・ に本文を読んで確かめました
signed引数が、
整数を 2の 補数で 表すか どうかを 決める こと。 signedが False (既定) で 負の 整数を 渡すと OverflowErrorに なることが 書かれていること。
関係する 道具とレッスン
次の一歩
数の