ID非公開さん
2022/1/23 23:52
2回答
プログラミングで少し疑問に思ったことがあります。なぜリテラルで
プログラミングで少し疑問に思ったことがあります。なぜリテラルで 2進数は"0b"、8進数は"0o"、16進数は"0x" と表記されているのですか?規則性もなさそうなので由来が知りたいです!
プログラミング・35閲覧
ベストアンサー
一番初めは、123、のように書く10進数だけでした。 その後、2進数と10進数は相性が悪いので、 2進数と相性が良く、0〜9の数字だけで表せる8進数がよく使われるようになりました。 しかし、8進数を 123 と書いては10進数と区別できません。 かと言って、先頭に数字以外の文字を使って区別すると、コンピュータの処理が複雑になって面倒です。 (単語を頭から読んでゆくときに、1文字目だけを見て、それが数値であるか、それ以外の識別子や命令等であるかを、判別したい為) そこで、10進数では、0から始まることは無いという特性を利用して、 頭が0なら8進数というルールを作りました。 123なら10進数 0123なら8進数と決めたのです。 その後、時代は進み、10〜15をA〜Fとして書くというルールが発明され、 コンピュータのシステムが8bit単位が主流になった事もあり、 16進数がよく使われるようになりました。 頭が0なら8進数、1〜9なら10進数と決まっていたので、もう数字に空きはありません。 そこで、8進数を更に拡張して、 0のあとに、16進数を表すHexadecimalから、xをとって、 0xを頭に付けたら16進数というルールができました。 頭文字のhでなかったのは、数字と見分けが付きやすいからかと思います。 ちなみに言語によっては、123h のようにお尻にhを付けて16進数を表すものもあります。 それからさらに時代は下り、2進数を表したいという声を受けて、 0xを更に拡張して、2進数を表す、binaryから、bを取り 0b が生まれました。 8進数の0oというのは、見たことないのですが、おそらく、同じ形に合わせて、 8進数のOctalの頭文字の、o を当てたのだと思います。
質問者からのお礼コメント
事細かに経緯も解説して下さり助かりました! 他のアンサーの方もありがとうございます!
お礼日時:1/24 2:24