Java楽しい。
この本は「独習」と言いながら全く初心者向けではなく、とても不親切な説明なんだけど、別の言語を触ってプログラムに書き慣れてから見直すと著者の言わんとしていることや説明したい順番が分かって楽しい。
例えばこのページ。
「下位8ビットだけが変数bに代入されます」なんていきなり出てきて理解できる独習者なんてそういないと思う。
意味ワカランので、まずは本のとおり書いて動かしてみる。
やれることからやる。手を動かす。コレ大事。
$ vim NarrowingConversion.java
$ javac NarrowingConversion.java
$ java NarrowingConversion
たしかに2が出る。なんでだ。
答えはここにあった。
Java で intは32ビット符号付き整数。
そこで、このソースの7行目にある
「10進数の258」を32ビット符号付き整数にしてみる。このサイトを使う。
「10進数」「符号付き」「32bit」の258は、2進数にすると
0000 0000 0000 0000 0000 0001 0000 0010
となる。
これの下位の8ビットだけが b = (byte)i; によって変数bに代入されるわけだから
0000 0000 0000 0000 0000 0001 0000 0010
2進数の「0000 0010」だけが変数bに入る。
10進数に直すと「2」
なるほど。2となるわけだ。
ちなみになぜ8ビットだけなのか?それは(Javaでは)byteは8ビット符号付き整数だから。
「変数と代入」なんて
どの言語でも同じだろうと読み飛ばしていたけど、実は32ビット符号付き整数すら正確に理解していなかったわけだ。反省。
Java面白い。独習本で基本的なところからやり直すのも。最高に面白い。
追記)この計算サイトほんと便利だな。10進数から2進数への変換とか、とても丁寧で分かりやすい。