無意味な思考~Cコンパイラ(パーサ)で数字「0」は十進数か八進数か

初めに言っておく。このまとめには意味がない。
1
夢乃 @iamdreamers

たまに(思考に行き詰まったときとか)考えていることのひとつ・・・

2012-06-30 09:05:08
夢乃 @iamdreamers

C言語(だけじゃないけど)で、数字の 0十進数八進数のどちらとして、コンパイラの中で処理されているのかなぁ・・・

2012-06-30 09:05:25

 

C言語での数字表記

夢乃 @iamdreamers

C言語を使ったことのある人なら知ってのとおり、C言語のプログラムの中では、数字を十進数十六進数八進数の三種類の方法で、表記することができる・・・

2012-06-30 09:05:46
夢乃 @iamdreamers

普通に数字を書けば十進数0x の後で数字を続ければ十六進数0 で始めれば八進数・・・例えば 15 は十進数字0xF は十六進数字017 は八進数字で、数値としてはどれも同じく 15 を表している・・・

2012-06-30 09:06:05
夢乃 @iamdreamers

ここで疑問が・・・他の数字はいいとして、数字の 0十進数八進数のどっちで解釈されるんだろう、ということ・・・

2012-06-30 09:06:23

プログラム中での 0 の使用例

夢乃 @iamdreamers

例えば、 for (i = 0; i < 15; i++) { ... } というプログラムを書いたとき、コンパイラでの解釈は置いておいて、プログラマはここで書いた 0 は十進数として書いていると思う・・・それは 15 が十進数字だから・・・

2012-06-30 09:06:40
夢乃 @iamdreamers

けれど、Cコンパイラはプログラマの意思を汲むわけではないから、どっちで解釈するかはコンパイラ次第・・・

2012-06-30 09:06:57

コンパイラはどう動く?

夢乃 @iamdreamers

C言語の仕様は「数字を八進数として表すときは0で始める」ということになっている(正確に書くとちょっと違ったかな?ま、いいや)・・・ここで言葉の問題なんだけど・・・「0で書き始まる数字」だから 00 だったら確実に八進数字・・・じゃ 0 だけだと「0で始まる」になるのかな?

2012-06-30 09:07:15
夢乃 @iamdreamers

いや、だけど、0 単独だから「0で始まる」とはならないのか?コンパイラが数字を解釈するとき、0 があったらいきなり八進数として続く文字を読むのか、それとも数字で始まる単語(?)があったらまず数字を全部読んでから数字を数値に変換するのか・・・

2012-06-30 09:07:43
夢乃 @iamdreamers

前者であれば確実に 0 を八進数字として解釈している・・・じゃ、コンパイラの実装が後者だった場合はどうだろう・・・数字の長さが1だったら十進数として解釈しているかもしれない・・・どっちだろう・・・

2012-06-30 09:08:02

だけど実は意味がない・・・

夢乃 @iamdreamers

・・・なんてことを、たまに考えたりしているけれど、これはまったくの無意味な思考・・・なんせ、数字の 0十進数八進数のどちらで解釈しても、数値にしたら結局は 0 だから・・・

2012-06-30 09:08:21

 

夢乃 @iamdreamers

なんか考えていて行き詰まったときに、つらつらと考えていることの一つでした・・・

2012-06-30 09:08:42