無意味な思考~Cコンパイラ(パーサ)で数字「0」は十進数か八進数か
初めに言っておく。このまとめには意味がない。
- iamdreamers
- 1904
- 0
- 1
- 0
C言語での数字表記
夢乃
@iamdreamers
C言語を使ったことのある人なら知ってのとおり、C言語のプログラムの中では、数字を十進数、十六進数、八進数の三種類の方法で、表記することができる・・・
2012-06-30 09:05:46
夢乃
@iamdreamers
普通に数字を書けば十進数、0x の後で数字を続ければ十六進数、0 で始めれば八進数・・・例えば 15 は十進数字、0xF は十六進数字、017 は八進数字で、数値としてはどれも同じく 15 を表している・・・
2012-06-30 09:06:05プログラム中での 0 の使用例
夢乃
@iamdreamers
例えば、 for (i = 0; i < 15; i++) { ... } というプログラムを書いたとき、コンパイラでの解釈は置いておいて、プログラマはここで書いた 0 は十進数として書いていると思う・・・それは 15 が十進数字だから・・・
2012-06-30 09:06:40コンパイラはどう動く?
夢乃
@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