駆け出しエンジニアが気になって調べたこと
世の中の駆け出しエンジニアさんたちは大抵QiitaやGitで情報を発信されているますよね。
ちなみに「じゃあ僕はnoteにするわ^^」という反骨精神だけでnoteに書いています。
まだまだnoteには駆け出しエンジニアの勉強記事が少ないような気がします。
そこで、私が何だこれ?と思って調べたことや、為になったことを書いていきます。
勉強しているのはJavaなので、なるべく黒本・紫本・2週間本に説明のないようなものを選んでみました。
[浮動小数点数の誤差の話]
とりあえず黒本でも紫本でも単語として出てくる「符号付整数」とか「浮動小数点数」という単語が気になって調べた結果です。
この2つの単語の正確な定義については、私のメモしているノートの正確性が怪しいので、参考にした記事を貼っておきますね。
https://qiita.com/Yachida/items/ed7df72063e52cc34887
https://qiita.com/Yachida/items/183d3a5f6e63acddb8f0
プログラムで足すと1.0とか2.0とか切りのいい数字になるはずなのに、0.978とか1.988みたいな不思議な数字が出たことはないでしょうか。
(まあ普通ないでしょうね・・・私もなんで調べたのでしょう)
それは2進数だと切りのいい少数にできなくて、丸め処理(プログラムだとround?)をしているので、何回も足したり引いてるうちに明確に誤差として表れてしまうという話でした。
ちなみに浮動小数点数はIEEE754という規格できちんと定められているらしいです。
Javaだとfloatが単精度、doubleが倍精度に該当します。
Javaの小数はまずdouble型として認識されます。
[char型に''(シングルクォーテーションが必要な場合一覧)]
これもまたくだらないですが、気になって一度は調べた方もいるのではないでしょうか。
char型に代入する際にシングルクォーテーションをつけるのは
①1文字 'A'
②ユニコードエスケープ '\u0041'
③エスケープシーケンス '\''
の3つ(だと思います)
逆につけないのが、
「1」のような数字1文字や「22222」のようにおそらく何らかの文字コードに該当している時です。
(Unicode16進数やASCII10進数などの文字コード。)
ちなみに22222は囎でした。
まだあるかもしれませんが、公式ドキュメント以外で探せた情報はこれくらいでした。
[機械語=マシン語=ネイティブコードみたいな奴一覧]
人によって使っている言葉が違うので、まとめました。
大体こんな感じです。
ソースコード=自然言語=~.java
バイトコード=中間コード=中間ファイル=クラスファイル=~.class
機械語=マシン語=ネイティブコード
[for文の有効判定]
for文の式が、
for(int i = 0; 6 > 5 ; i++)や
for(int i = 0; false ; i++)はEclipseにデッドコード扱いされますが、
for(int i = 0; i > 10000 ; i++)はデッドコード扱いになりません。
i++の判定はfor文の条件式が判定された後なので、上記の3つは全て同様に何もせずそのままループを抜けるはずです。
変数であればデッドコード扱いにならないのには何か意味があるのかもしれませんが(例えばこの場合なら変数jをループの外に用意した2重ループでj > 10000としていれば条件がtrueになる可能性もあるかもしれない)これが有効に使える状況は来るのでしょうか・・・。
[まとめ]
いかがだったでしょうか。
こんなこと学んで役に立つの???
微妙です。
良い面を言えば、上記にもあるように複雑なプログラミング関係の周辺用語に対して親しみを持てるようになります。
こんなことを繰り返しているおかげで、様々な事がなんとなくなじんだ気がします。
悪い面を言えばコスパが悪すぎます。
ただ、初学者の内は10時間コードを書こうと思っても書けないものだと私的には思いますので、こんな学習も良いのじゃあないかと思います。
こんな面白いことを思いついた、こんな疑問を持った、どうしてこうなるんだろうという他人の疑問にもっと触れてみたいと思い、記事にしてみました。
もし読んでくださった方がいたら、自分のノートの端っこに書き留めた雑学を発表してくださるととても楽しい世界になると思います。
ありがとうございました。
先人たちの肩の上で。以下略。
この記事が気に入ったらサポートをしてみませんか?