16進法とは何ですか?なぜ計算でそれほど使用されるのですか?コンピューターはデータを保存するために0と1を使用することを知っていますが、なぜ16進数を使用するのでしょうか?
16進法とは何ですか?なぜ計算でそれほど使用されるのですか?コンピューターはデータを保存するために0と1を使用することを知っていますが、なぜ16進数を使用するのでしょうか?
回答:
16進数は、コンピューティングで非常に一般的な数値システムです。バイナリのことを聞いたことがあるかもしれません。バイナリには1と0しかありません。
人間は主に10進数(基数10)のシステムを使用します。このシステムには10個の数字があります。
0、1、2、3、4、5、6、7、8、9
ただし、コンピューターは10進法を使用して動作しません。これらはバイナリ状態(何かが真または偽)であるため、基数2(2進数は通常0bで始まる)で動作し、数字は0と1のみです。
以前は、8進数(または8進数)が使用されていました。基数8の「10」がバイナリの「0b1000」だったので良かったです(10進数の10はバイナリの1010です)。通常、8進数には、数字を書き込むときに「0o」というプレフィックスが付きます(ただし、ほとんどのプログラミング言語では「0」というプレフィックスが付きます)。8つの数字があるので、基数8と呼ばれます。
Octalは、現在も主にUnixおよびLinuxで権限を設定するときに使用されています
時間が経つにつれて、計算能力とスペースが急速に増加しているため、より大きな数を表す簡単な方法が必要でした。16などの16は16 を使用する標準になりました。16のように8は2の累乗であるため、数字ごとの変換が容易になります(このコメントを参照してください。16個の数字があるため、文字はまた、通常、16進数の先頭には0xが付きます。
16進数は4ビット(1つの8進数は2を表すことができる)であり、したがって1バイトに2つの数値があるため、16進数も便利です。ほとんどの16進エディタでは、これがバイトの表現方法です。
基数10には10個の数字があります。9の後、何をしますか?数字が足りません。元の数値の左側に「10」個の場所を作成します。1で、右端が0になります。16進数でも同じことが起こります。
0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F、10、11など
0x1Fに達するまで、プロセスは0xFF(10進数で255)まで繰り返され、その後0x100になります。カウントの詳細については、こちらをご覧ください。
以下は、10進数、16進数、8進数、2進数間の変換を示すグラフです。
0
はなく接頭辞を使用していることに注意してください0o
。
16進法とは
16進数システムは、0123456789ABCDEF
2 桁()を使用する2 01
進数または10桁(0〜9)を使用する10進数とは対照的に、16桁()を使用する16進数の番号付けシステムです。(私たちのシステムでは)数字は10桁しかないため、代わりにAからFの文字を使用して、「数字#10」、「数字#11」などを記述します。
なぜコンピューティングでそんなに使われているのですか
16は2のべき乗であり、16進数を2進数に簡単に変換できます。また、既に説明したように、「コンピューターはデータを格納するために0と1を使用します」。各桁は正確に4ビットのデータを格納するため、16進数は4桁の2進数(1ビット)に非常に簡単に変換できます。
| hex bin | hex bin |
| 0 0000 | 8 1000 |
| 1 0001 | 9 1001 |
| 2 0010 | A 1010 |
| 3 0011 | B 1011 |
| 4 0100 | C 1100 |
| 5 0101 | D 1101 |
| 6 0110 | E 1110 |
| 7 0111 | F 1111 |
どうして16進数を使うのですか
バイナリよりも大きな数を表現するのが簡単になります。次のように、2桁の16進数だけで256の異なる値を表すことができます。
dec 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...
hex 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 ...
4桁の16進数で65536の値を表すことができます。Hexでは、文字、数字、句読点が各文字を0から256の間の数字にマップする形式で保存されるため、hexdumpと呼ばれるものでデータを検査することがはるかに簡単になります(ASCIIと呼ばれるか、他のエンコードを使用する場合があります)。さらに、他の多くのファイル形式(PNGなど)は、ファイルを構成する各情報に256ビットが含まれるように調整されています。
要約すると、16は2の累乗であり、256は16の累乗です。これにより、2進数とテキストまたはその他のデータの両方を表現するのに適した方法になります。
数値abcdがある場合、これは((a * + b)+ c) + d と同等です。これは次のようなものです:
16進数システムでは16桁が必要ですが、10桁しか使用できません(0..9)。したがって、欠落している6桁については、A..Fの文字がA = 10、...、F = 15で使用されます。
もちろん、たとえば5または7を基数とする他の多くの数値システムについて考えることもできます。
数値を使用した計算では、使用しているベースは関係ありません。バイナリシステムで加算および乗算できます。10進システムで実行でき、16進システムで実行できます。10進法で計算するために使用され、コンピューターは2進法で計算します。
上記のように、どの番号体系で番号を指定してもかまいません。基になる数値は同じで、表現のみが変更されます。コンピュータは、内部的に常にバイナリで数値を保存および使用(たとえば、計算)します。
では、なぜプログラマー(私のような)は異なる数体系を使用するのでしょうか?2の累乗に基づいて数値システムを選択する理由は2つあります。1つ目は短さであり、2つ目はどのビットが設定されているかをよく見ることです。
バッファーの内容をコンソールに書き込む関数がある場合、1〜3桁(10進数:0..255)の10進数で印刷するコードを作成できます。数値をバイナリ形式で書き込む場合、1〜8桁の出力(バイナリ:0..11111111)になります。また、8進数システムを使用して、1〜3桁(8進数:0..377)または1〜2桁の16進数(16進数:0..ff)になることもあります。
これは1バイトのみでした。ここで、32ビットの数値を書きたいと仮定します。
ご覧のとおり、16進数の出力が最短です。
パックされた情報を保存する一般的なパターンは、バイトの各ビットを個別に使用することです。ファイル属性の例を見てみましょう(MDSNを参照)。属性「非表示」、「アーカイブ」、「読み取り専用」、「一時的」などが必要です。各属性を1バイトで格納することも、情報を1バイト(または複数バイト)にパックすることもできます。各ビットは1つの属性を正確に表します。MSDN記事のdwFlagsAndAttributesを見ると、Windowsがこのパターンを使用していることがわかります。
MSDNページにとどまるためFILE_ATTRIBUTE_ENCRYPTED
、このフラグは10進数の16384と16進数の0x4000です。先頭の「0x」は、16進数をマークするためのCプログラマーの規則です。したがって、4000だけを見ていきます。どのビットが設定されているかを知りたい場合は、16384を最初にバイナリに変換する必要があります。通常は暗算で行います。しかし、16進4000を取りましょう。これは非常に簡単です。16は2 * 4なので、すべての16進数は正確に4ビットです。そのため、4をバイナリ0100に、ゼロをバイナリ0000に変換するだけです。
多くの場合、個々のビットに関するものではありませんが、プログラマは2の累乗に合わせる傾向があります。ランダムアドレスではなく、16の下位ビットをゼロに設定したアドレスにプログラムをロードします。そうすれば、アドレスが0x12345678であれば、このアドレスが0x03810000にロードされたプログラムではなく、0x1234にロードされたプログラムに属していることが簡単にわかります。
それはフレーバーの問題です。ビットバイナリを直接見たい場合は、バイナリで問題ありません。ビット23またはビット24が設定されているかどうかを確認するために数字をカウントする必要がある場合、長い数字のバイナリはイライラするかもしれません。これは16進数の方が簡単です。各桁が4ビットを表すため、カウントが少なくなります。個人的には8進数を使うことはめったにありません。非常にまれです。
ベース32は2の累乗で、これは素晴らしいです。ただし、0..9、A..Vなどの32桁が必要です。これは覚えておくべき数字です(「S」が応答する番号を簡単に見つけることができますか?)。もう1つの注意点は、ベース32では、2桁の16進数が正確に1バイトであるという優れた機能を失うことです。これは、メモリの内容を見ると非常に便利です。また、ベース32では、1バイトが持つことができる値を表すためにまだ2桁が必要です。32ビット値の場合、必要なのは8桁の16進数ではなく7桁だけですが、それはベース32システムの欠点に耐えるのにそれほど多くありません。
現在使用されているさまざまな数値表現システム(= include)は
、2進数、8進数、10進数、16進数です。
どちらを選択するかは、多くの場合、手元のタスクの使いやすさに依存します。
バイナリは、電子機器内で簡単に表現できるため、コンピューターシステムおよびデジタルテクノロジー全般で使用されます。2を基数とする関数は、オン/オフ、true / false、またはその他の同様の繰り返し2状態情報の表現と同様、簡単に構築できます。
8進数は、3桁の2進数のグループがある場合に便利です。たとえば、Unix / Linuxの許可設定の場合のように。
少しの間10進数をスキップして、16進数は8進数と同じようにいいですが、4桁の2進数で、8ビット、1バイトが2桁の16進数にうまく収まるという事実です。(=答え)
これにより、コンピューター内の偶数8ビットグループは簡単に書き留められ、表現され、理解されます。つまり、ソフトウェアを書くとき、データを処理するとき(HTML / CSSのRGB色値など)、データ構造を形成するときなど、日常的に非常に便利です。
小数。10進法は、指と足の指が10本あるという事実から発展したと推測できます。1桁の数字は、指ごとに最大10個までカウントされるアイテムの数を表します。
これらは
、2、8、10、および16を基数とする数値システムを表します。
通常、ベースは、カウントできる1桁の「アイテム」の数を示します。たとえば、2進数には2、10進数には10があります。
16進数には16桁の1桁の項目があるため、システムには16の「数字」が必要です。したがって、0〜9およびaf(10進数と比較して6余分)を使用します。
一般モードを続行するには、2桁以上のベース は、1桁の表現があれば他のすべてと同様に機能します。
10進数の数値は次の形式で形成されます。
... d *10³+ c *10²+ b *10¹+ a *10⁰
10進数「dcba」の場合-d、c、b、aで0123456789から選択
次のように変更します。
... d *base³+ c *base²+ b *base¹+ a *base⁰
また、ベース2以上の「動作」を示すより一般的なフォームがあります。
たとえば、5桁の基数5は、上記の他のいずれかと同じくらい便利な場合があります。 1/12時間[5分]です)
注:⁰¹²³-画面に何か他のものが表示されている場合は上付きの0123