ビットとバイト長計算ツール - 無料のデータサイズツール
整数、16進数文字列、テキスト文字列のビット長とバイト長を計算する無料ツール。UTF-8、UTF-16、UTF-32、ASCII、Latin-1といった各文字エンコーディングごとの計算式を示しており、開発者やネットワーク設計者の日々の実務やデバッグ作業に役立つ。
ビットとバイト長計算機
8 ビット = 1 バイト
可視化
ドキュメンテーション
ビット長・バイト長計算機とは何ですか?
ビット長・バイト長計算機は、データに必要なビット数とバイト数を求めます。ビットは単一の二進数字で、0または1です。バイトは8ビットのまとまりです。計算機は整数、十六進数文字列、またはテキスト文字列を受け取り、両方の単位で正確なサイズを示します。
これはプログラミング、ネットワーク通信、データ保存に関係します。データベースの列、ネットワークパケット、ディスク上のファイルはいずれもバイト単位のサイズを持ち、そのサイズはデータの書き方によって変わります。
整数のビット長を計算する方法
正の整数のビット長は、二進数表現の桁数です。たとえば、二進数の255は11111111で、桁数は8です。したがって、ビット長は8です。
公式: 正の整数nのビット長は、nを底2で表したときの桁数です。特殊な場合として、n = 0のビット長は1です。
負の整数には、コンピューターで符号付き数値を格納する標準的な方法である2の補数を使用します。負の整数のビット長は、2の補数形式でその値を格納できる最小ビット数です。たとえば、−128は8ビット(10000000)に収まりますが、−129には9ビットが必要です。8ビットで表せる最小値は−128だからです。
ビット長が分かれば、バイト長は次のように、最も近い整数バイト数へ切り上げて求められます。
バイト長 = ⌈ビット長 ÷ 8⌉
記号⌈ ⌉は「切り上げ」を意味します。9ビットの値でも、2個の完全なバイトが必要です。バイトを分割することはできないためです。
計算例
| 整数 | ビット長 | バイト長 |
|---|---|---|
| 0 | 1 | 1 |
| 255 | 8 | 1 |
| 256 | 9 | 2 |
| −128 | 8 | 1 |
| −129 | 9 | 2 |
| 18,446,744,073,709,551,615 (2⁶⁴ − 1) | 64 | 8 |
十六進数文字列のビット長を計算する方法
各十六進数字(0–9、A–F)は正確に4ビットを表します。4ビットで16通りの値を表せるためです。
公式: ビット長 = 十六進数字の個数 × 4。バイト長は、ビット長を8で割り、再び切り上げて求めます。
たとえば、十六進数文字列「FF」は2桁なので、ビット長は2 × 4 = 8ビット、つまり1バイトです。十六進数文字列「ABCD」は4桁で、16ビット、つまり2バイトになります。個数を数える前に、空白などの空白文字は削除されます。桁数が奇数でも、整数バイト数に切り上げられます。「F」は4ビットですが、計算機では1バイトとして示されます。
テキスト文字列のバイト長を計算する方法
テキストの場合、サイズは文字エンコーディング、つまり文字をバイトに変換する規則によって決まります。計算機は次の5種類のエンコーディングに対応しています。
- UTF-8:ウェブ全体で使われる可変長エンコーディングです。各文字は1~4バイトを使用します。通常の英字、数字、句読点はそれぞれ1バイトです。
- UTF-16:JavaScriptとWindowsで内部的に使われます。ほとんどの文字は2バイトを使用します。基本多言語面の範囲外にある多くの絵文字などの文字は4バイトを使用します。
- UTF-32:固定長エンコーディングです。文字の種類にかかわらず、すべての文字が正確に4バイトを使用します。
- ASCII:主に英字、数字、基本的な句読点を含む128文字を扱う7ビットのエンコーディングです。各文字は1バイトを使用します。この集合の範囲外の文字は拒否されます。
- Latin-1(ISO-8859-1):256文字を扱う8ビットのエンコーディングで、西ヨーロッパ言語で使われるアクセント付き文字を追加したものです。各文字は1バイトを使用します。この集合の範囲外の文字は拒否されます。
公式: バイト長 = エンコーディングが文字列に対して生成するバイト数。ビット長 = バイト長 × 8。
数えるのはテキスト本体だけです。バイト順マークは追加されないため、ここでのUTF-16またはUTF-32の値は、先頭にマークを書き込むツールの値より2または4バイト小さくなります。
計算例
テキスト「Hello, world!」は13文字で、すべて通常のASCII英字と句読点です。
- UTF-8:13バイト(104ビット)。すべての文字が1バイトに収まるためです。
- UTF-16:26バイト(208ビット)。すべての文字が2バイトを使用するためです。
テキスト「こんにちは世界」(七文字の日本語)は、UTF-8で一文字あたり3バイトを使用し、合計で21バイト(168ビット)になります。
😀などの絵文字は基本多言語面の範囲外です。UTF-8では4バイト、UTF-16では4バイト(サロゲートペアとして)、UTF-32では4バイトを使用します。
符号付き整数で答えが変わる理由
コンピューターは負の数を、単純なマイナス記号ではなく2の補数で格納します。そのため、負の整数のビット長は、その絶対値のビット長に1を加えたものとは限りません。規則では、ビット長は、値が−2^(k−1)以上となる最小のビット数kです。したがって、−128(−2⁷に等しい)は8ビットに収まりますが、−129には9ビットが必要です。
よくある質問
バイトをビットに変換するにはどうすればよいですか? 8を掛けます。一バイトは定義上8ビットを格納するため、十バイトは80ビットです。
ビット長とバイト長の違いは何ですか? ビット長は個々の二進数字を数えます。バイト長は8ビットのまとまりを数え、ビット長が8の倍数でない場合は次の整数バイト数へ切り上げます。
UTF-8の文字は何バイトを使用しますか? 1~4バイトです。ASCIIと共通する文字は1バイトを使用します。アクセント付きラテン文字、ギリシャ文字、キリル文字の多くは2バイトを使用します。中国語、日本語、韓国語の文字の多くは3バイトを使用します。絵文字などの一部の珍しい記号は4バイトを使用します。
十六進数文字列のバイト長はどのように計算しますか? 空白を削除してから十六進数字の個数を数え、4を掛けてビット数を求め、その後、整数バイト数へ切り上げます。一バイトは十六進数字2桁なので、「FF」は1バイト、「ABCD」は2バイトです。「F」のように数字が一桁だけの場合は4ビットですが、それでも1バイトを占有します。
負の整数が正の整数に対応する値より多くのビットを必要とすることがあるのはなぜですか? 2の補数では符号を示すために1ビットを使いますが、そのビットはすべての場合に値へ追加されるのではなく、値の範囲と共有されます。−128は、正の値で127までを表せるのと同じ8ビットに収まりますが、−129はもはや8ビットに収まらず、9ビットが必要です。
この計算機で受け付けられる入力サイズはどのくらいですか? 1,000,000文字以内の整数、十六進数文字列、テキスト文字列です。
参考文献
- "Character encoding." Wikipedia、Wikimedia Foundation。https://en.wikipedia.org/wiki/Character_encoding
- "UTF-8, UTF-16, UTF-32 & BOM." Unicode, Inc.https://www.unicode.org/faq/utf_bom.html
- "Two's complement." Wikipedia、Wikimedia Foundation。https://en.wikipedia.org/wiki/Two%27s_complement