会社員Kのお勉強部屋

本の内容をメモしたり勉強記録をつけたり、思ったことを書くブログ

勉強ログ#2

今日の勉強

  1. Cプログラミング入門以前>6章 演算について(2hくらい)
  2. レアジョブ英会話(25min)

 

昨日自販機アルゴリズムの作成の続きをすると言いましたが、PCをいじる時間がなかったため以前から地味に読み続けている「Cプログラミング入門以前」という本を読み進めました。

基本の四則演算はもちろんビット演算やら論理演算などなど、Cで出てくる演算方法について復習しました。

特に勉強になった内容をメモしておきます。

ビット演算

これ、見れば思い出すけどパッと出てこないので苦手意識あるやつ(´;ω;`)

AND→1かつ1は1、それ以外の1/0の組み合わせは全部0

OR→0または0は0、それ以外の1/0の組み合わせは全部1

XOR→「一緒は0」つまり、0xor0は0、1xor1は0、1xor0は1、0xor1は1

XORの記号「^」これ見慣れない。今回初めて知った。

NOTの記号「~」これも、実際の業務のソースコードで出てきたけど初めて見たとき何をしているのか意味がわからなかった思い出の記号です。

ビット演算とシフト演算、知ってはいたけど何に役立つのかさっぱり意味がわからず、全然頭に定着させずに実際の業務でソースを読んだら痛い目を見ました。

ビット管理されているDBみたいな配列から特定のビットを取り出したり、特定のビットの値を変更したりする時に大変役に立つということを業務で知りました。

 

前置式インクリメントと後置式インクリメントの違い

これ、新人研修のとき「???」でしたが、この機会に覚えました!!

a=2のとき「++a」「a++」は両方「a=3」

オペランド単独でやると前置式でも後置式でも結果は同じ。
だが他の処理が組み合わさると前置と後置で結果が異なる。

ex1)a=10のとき
b=++a +9
であればb=20になる。

これは以下の処理をしています。

a=a+1(aは11になる)
b=a+9(11+9をしている)

つまり先にaをインクリメントしてから他の計算をする。
こっちは直感的に普通に計算すればいいからわかりやすいです。

ex2)a=10のとき
b=a++ +9
であればb=19

これは以下の処理をしています。

b=a+9(b=10+9)
a=a+1(a=11)

つまりaをインクリメントする前に、とりあえずインクリメントを無視して先に式全体の計算をする。そのあとaをインクリメントする。「Cプログラミング入門以前」の表現を引用すると、

後置式のインクリメント/デクリメントは、その式の計算処理が終わった後で、こっそり計算する。

 

ちなみにC++っていう言語があると思いますが、あれもCのインクリメントなんですってね。「Cをちょっと良くした言語」っていう意味なんじゃね?って「Cプログラミング入門以前」には書いてありました。

そんなふうにCプラを考えたことがなかったですわ!!

 

条件演算子(3項演算子)

こちら、お初にお目にかかりました。
慣れないとわかりにくいな~と思いましたが、本によるとこれを使うとプログラムが簡素になるため熟練者が好んで使うのだとか。

f:id:rimoo:20210314233132p:plain

お絵描き機能があったので使ってみましたが無残な姿にwww
わかりにくくてすみません笑
aの値によって結果がbかcか決まる、ということですね。
ExcelのIf関数的なイメージでしょうか。=IF(論理式,真の場合,偽の場合)みたいな!

ex1)a = (3 != 3) ? 5 : 6
のとき、3 != 3はfalseなので0つまり
a=0 ? 5 : 6
となるため、a=6になる。

ex2)a = (3 == 3) ? 5 : 6
のとき、3==3はtrueなので1つまり
a=1 ? 5 : 6
となるため、0以外だからa=5になる。

 

 

以上、今日学んだことでした。

勉強になりました。