昨日発生していたサイトログインできない不具合は修正されております(詳細はこちら)

エンジョイC021回目ビット演算(2020-08-16)

1
ほえほえ@スプシマン @hoehoe1234

エンジョイC 21回目 2020/8/16(日) 今回は牛本のビット演算について講義を行いました。C言語では内部表現をそのまま利用することが多いのですがビット演算などはその最たるものですね。この3つ目のforが分からないということがあり、生徒さんどうしで検討していただきました。 pic.twitter.com/MGxsHzMpOr

2020-08-23 05:01:32
拡大
ほえほえ@スプシマン @hoehoe1234

直感的に何回ループするのか分かりくいですね。0x80はビットでいうと1000 0000 なので終了条件となるのはゼロなので8回ループします。題材にしているのは数字をどのようにしてビットに圧縮するか?みたいな演習問題です。

2020-08-23 05:03:16
ほえほえ@スプシマン @hoehoe1234

これは生徒さんがおいしいミスを提供してくれましたので了承の上でのUPです。どうしてもビットがクリアされない!と思っていたら謎の「;」がありました。この図はわかりやすいように改行していただいてます。 pic.twitter.com/TQIosBcAL6

2020-08-23 05:04:55
拡大
ほえほえ@スプシマン @hoehoe1234

仮想的なビットマップ端末(テキスト端末ですね)に対しての出力です。牛本の演習ではナナメ線を一本だけでしたがやはりXにしたほうがかっこいいですね。ちなみにこれは/の線が1つずれています。 pic.twitter.com/h6h25ZRYp2

2020-08-23 05:06:31
拡大
ほえほえ@スプシマン @hoehoe1234

その理由を解析して修正したXがこちらになります。このあたりはC言語に限らないのですが+1、-1の間違いがどうしても起きてしまいますね。C言語では配列ガードがないのでそのまま動いてしまうので理由がなかなかわからないことがありますね。 pic.twitter.com/kkj3EkgDdB

2020-08-23 05:08:11
拡大
ほえほえ@スプシマン @hoehoe1234

上の2つのfor文が線を引くコードです。この2つのコードはモデル化された(概念的なとでもういうのでしょうか?)「整数」で線を引きます。SET_BITはマクロで整数をビットの位置へのセットに変換します。CREA_BITマクロは逆にリセットします。 pic.twitter.com/HqGZmoQYk9

2020-08-23 05:10:09
拡大
ほえほえ@スプシマン @hoehoe1234

うまく線が引けていません。今回はSET_BITがマクロなので.iファイルをみてマクロがどのように展開されているのか確認します。マクロ引数のxとyを括弧で囲んでいなかったので演算子の優先順位でおかしくなっていますね。 pic.twitter.com/udearYjYEZ

2020-08-23 05:11:51
拡大
ほえほえ@スプシマン @hoehoe1234

ということでマクロの引き数を括弧で囲みます。インクルードファイルの展開を見たり、アセンブラコードをみることでより理解が深まると思います。 pic.twitter.com/11sET5mCgz

2020-08-23 05:13:14
拡大
ほえほえ@スプシマン @hoehoe1234

マクロの拡大です。一つ一つ紐解いていかないとなにをしているのかわかりにくいですね。牛本ではこのマクロを組む前にまず数式とロジックを組み立てています。 pic.twitter.com/dY47wG9i8W

2020-08-23 05:15:24
拡大
ほえほえ@スプシマン @hoehoe1234

今度はXの代わりに市松模様を書いてみてもらっています。このあいだTLでもありましたね。この生徒さんはXとYが両方偶数か、両方基数か。という判断をしています。こういうのはまずはボードに図を書くと共通のルールを見つけ出しやすいですね。 pic.twitter.com/t0uS3JxOig

2020-08-23 05:17:20
拡大
ほえほえ@スプシマン @hoehoe1234

私はTLでX+Yが偶数になればよい。というのを知っていましたが、前出の生徒さんは自分でパターンを見抜いて両方偶数、両方基数を導き出したので立派だと思います。ロジックが思い浮かばないときはまず図と具体例をかいてみることは重要ですね。 pic.twitter.com/nmJVdVeJ2H

2020-08-23 05:18:40
拡大
ほえほえ@スプシマン @hoehoe1234

今回は主に牛本を進めました。 エンジョイCコースもいつからでもどなたでも参加できます。ご興味のある方はお気軽にお問い合わせください。

2020-08-23 05:19:35