LoginSignup
7
2

More than 1 year has passed since last update.

様々な言語の 16進数リテラル

Last updated at Posted at 2022-07-02

これは何?

特に言語を限定するような話もせずに「16進数は頭に 0x を付けます」のようなことが書いてある記事(もう見失っている)を見て、いや色々あるよ、と思ったので調べてみた。

調べてみた

0x... チーム

頭に 0x をつける言語たとてもたくさんある。

C, C++, Objective-C, Haskell, OCaml, Perl, Python, PHP, Ruby, Java, JavaScript, C#, Swift, Go, Rust, ...

上記のリストを見る限り、C言語に由来しているように見える。

Cの祖先といえば BCPL ということで BCPL のマニュアルらしきもの を見てみると

たぶんBCPL
deadcode=#xDEADC0DE.

などとあるので、どうも BCPL 由来ではないらしい。

じゃあ B言語かなと思って B 言語のマニュアルらしきもの を見ると、こちらには 16進数リテラルがそもそも存在しない。

C言語 をデザインするときに発明したものなのかなぁ。

0 に続く x は、 hexadecimal の x なんだろうなぁと思う。

あと。
Haskell・OCaml などの、あまり C 言語の影響下に無さそうな人たちも 0x.. 方式を採用しているのに驚いた。
そう思うと C 言語由来じゃないのかもとも思うけど、どうなんだろう。

Pascal と Delphi

Pascal とその末裔は

pascal_or_dephi
val := $deadbeef;

のように、頭に $ をつける。

じゃあ 8進数どうすんだって思うわけだけど、

&377 のように別の記号を使う。贅沢だね。

Basic とその末裔

Basic では、頭に &h をつける。この hhexadecimal の h なんだと思う。

Fortran

書き方が

  • Z'DEADBEEF'
  • X'DEADBEEF'
  • 'DEADBEEF'X

のように色々あるらしい。末尾に Z をつける例は見当たらなかった。

最初に書いた Z'DEADBEEF' が主流で、残りは非推奨っぽい。

なんで Z なのかというと。
https://fortran-lang.discourse.group/t/boz-constants-but-why-z/981/4
によると、X が使えなかったから、らしい。

Common Lisp

#16rDEADBEEF

のように、# +基数+r を頭につけるらしい。

r ってなんだろ。

2022.7.4 追記: コメントを頂き ああ radix か、そりゃそうか、と思った。ありがとうございます。

よく使う 16進数 には #x というシンタックスシュガーもあって、

#xDEADBEEF

でもよいらしい。

Smalltalk

16rDEADBEEF

のように書くらしい。Common Lisp と似ているね。

Ada

16#DEADBEEF#

のように、 16## で書くらしい。

PL/I

Enterprise PL/I for z/OS Language Reference - IBM

’100’XN /* same as ’00000100’XN with value 256 */
’8000’XN /* same as ’00008000’XN with value 32,768 */
’FFFF’XN /* same as ’0000FFFF’XN with value 65,535 */

とあるので、 'DEADBEEF'XN という形式らしい。

CASLⅡ

#DEAD のように、先頭に # をつける。

じゃあ 8進数どうすんだって思うわけだけど、 8進数は書けないらしい。

調べて思ったこと

0x... 方式は

  • 16進数であることを示すために必要な文字が 2文字だけ。
  • $& などの文字を特定の用途に専有することもない。
  • 16進数以外も同じような記法で作れる。

と、わりと優れている感じがする。

これで「0 で始まったら 8進数」というルールさえなければ手放しで絶賛なのだけど。

まとめ

やっぱり色々あるね。

色々あるんだけど、新し目の言語の殆どは 0xdeadbeef 方式を採用しているっぽい。

C 言語発祥なのかなぁ。

それと。Wikipedia に素晴らしい記事があることを 教えていただいた
完全にこの記事より優れている。

この記事を見ると、 AT&T アセンブラ が発祥なのかもしれない(が、明確には書いていない)。

お願い

この言語はこうだよ、みたいな情報をコメントに書いていただけると、私が喜びます。

7
2
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2