16進数の前に何が付いているの0x
ですか?接頭辞の使用法は理解していますが、なぜ0x
選択されたのかという意味がわかりません。
16進数の前に何が付いているの0x
ですか?接頭辞の使用法は理解していますが、なぜ0x
選択されたのかという意味がわかりません。
回答:
ショートストーリー:0
それは定数(およびない識別子/予約語)を扱っていますパーサに指示します。数値の基数を指定するには、まだ何かが必要です。これx
は任意の選択です。
長い話: 60年代、普及しているプログラミング番号システムは10進数と8進数でした—メインフレームは1バイトあたり12、24、または36ビットでした。これは3 = log2(8)で割り切れます。
BCPL言語8 1234
は8進数の構文を使用しました。ケントンプソンがBCPLからBを作成したとき、0
代わりにプレフィックスを使用しました。これは素晴らしいです
0
両方のベースで同じです)、00005 == 05
)であり、#123
)。CがBから作成されたとき、16進数の必要性が生じ(PDP-11には16ビットのワードがありました)、上記のすべての点が依然として有効でした。他のマシンで0x
は依然として8進数が必要だったため、任意に選択しました(00
おそらく扱いにくいと判断されました)。
C#はCの子孫であるため、構文を継承します。
0x
オーバー00
好み/不器用でした。00
既存のコードを壊します。0010
進があるように8
しながら、0010
16進数は次のようになりよう16
。彼らは、2番目の数字のインジケーターとして数字を使用できなかったため(8
またはを除き9
、16 進数に関連する重要性も持ちません)、文字は必須です。そして、その葉のいずれか0h
または0x
(H E X idecimal)。この時点から、本当に好みに戻ったようです。
0
8進数に接頭辞を使用すると、長年にわたって非常に多くの問題が発生しています。特に、電話番号がで始まる英国などの国では0
。JavaScriptや他の多くの言語では、これらを8進数として解析し、保存する前に数値を変換します。おもしろいことに、人気のあるデータベース製品の1つは、数値にまたはが含まれている場合、黙って10進解析に切り替えます。8
9
注:正解はわかりませんが、以下は個人的な推測です。
すでに述べたように、数値の前の0は、それが8進数であることを意味します。
04524 // octal, leading 0
16進数を表示するシステムを考え出す必要があると想像してください。また、Cスタイルの環境で作業していることに注意してください。アセンブリのようにhで終わるのはどうですか?残念ながらできません。有効な識別子であるトークンを作成することができます(たとえば、変数に同じ名前を付けることができます)。
8000h // hex
FF00h // oops - valid identifier! Hex or a variable or type named FF00h?
同じ理由でキャラクターをリードすることはできません。
xFF00 // also valid identifier
ハッシュの使用は、プリプロセッサと競合するため、おそらくスローされました。
#define ...
#FF00 // invalid preprocessor token?
結局、何らかの理由で、16進数を表すために先頭の0の後にxを置くことにしました。それはまだ数字で始まっているので一義的ではなく、有効な識別子にすることはできず、おそらく先頭の0の8進法に基づいています。
0xFF00 // definitely not an identifier!
0xFFAB1234
ように記述する必要があります0FFAB1234h
。私が若かったとき、私はパスカルのインラインアセンブラからそれを覚えてstackoverflow.com/q/11733731/995714
これは、数値が他のベースではなく16進数であることを示す接頭辞です。Cプログラミング言語はこれを使用してコンパイラーに指示します。
例:
0x6400
変換 6*16^3 + 4*16^2 + 0*16^1 +0*16^0 = 25600.
コンパイラは読み取ると0x6400
、それは、数はの助けを借りて、進で理解し0xの 用語。通常、(6400)16または(6400)8などで理解できます。
以下のためのバイナリそれは次のようになります。
0b00000001
私が何らかの形で助けてくれたことを願っています。
良い一日!
x6400
ですか。x
まだ進数を推測するために使用することができます。
先行する0は、基数2、8、または16の数値を示すために使用されます。
私の意見では、「x」は16進数のように聞こえるため、0xは16進数を示すために選択されました。
私の意見だけですが、それは理にかなっていると思います。
良い一日!