0(ゼロ)はゼロではない?ミスも経験

   2012/04/26

プログラミングは、楽しいものです。
人は言ったとおりには動いてくれませんが、
プログラムは書いたとおりに動きます。

こんにちは、管理人イガジーです。

プログラムが思ったように動かないことはよくあり
パソコンがおかしいのではないかと思えたりしますが
ほとんどの原因は、自分(書いた人)にあります。
(仕様の誤解や勘違いも含めて、です)

恥をしのんで、私の失敗談をひとつ。

int a=10;
int b=123;

というようなことを書いて、正常に動いていました。
なんとなく、数字の桁を揃えたくなって

int a= 10;
int b=123;

としてみました。特に問題なし。
その後で、気の迷いと言いますか、

int a=010;
int b=123;

としたら、何だか動作が変。
実際は他の部分も変更していたので、この変更が影響したと
気づくまでにはずいぶん時間がかかりました。

動作が変になった理由は、次のとおりです。

System.out.println(10);
System.out.println( 10);
System.out.println(010);

というプログラムを走らせてみれば分かりますが
結果は
10
10
8
となります。

つまり、0で始まる数値は「8進数」とみなされます。
これは、JavaだけでなくC言語も同じです。

分かってしまえば、な〜んだ(恥ずかしい)というミスですが
実際にこういうミスを経験して、悩んでみないと
なかなか身につかないと思います。

人の失敗談を知れば、時間の節約になると思いますので
恥をしのんで、告白してみました。