5/26(火)〜28(木) の学習ログです(主にC言語)

おはようございます、安藤です。

 最近、朝型に生活のリズムをシフトしたのですが、早起きするだけで嬉しいです。

なんか気分が良いです。

よく分からないけど、昼や夕方に起床した時にこのように気持ちにはならないので、朝型はそれでけで素晴らしいです。

 

話は変わりまして、

はてなブログのページですが、SSLに対応して欲しいなと思います。

https」鍵付きのやつね。

保護されていない通信」って表示されているのは辛いです。

トップページは対応しているのに…なぜ!!!

 

さて、今回も学習ログを残していきます。

 

 

 

2020.5.26(火) 
C言語(web記事「苦しんで覚えるC言語」)
●文字列処理関数
・文字列の入力
数値と同様、文字列を入力する場合にもscanf関数を使うことができる。
文字列を入力する場合、scanf関数で%s指定子を指定する。
配列名の前に&はつけない。
注意点
①配列の要素数よりも多く入力すると暴走する。
この問題を解決するには、文字配列の要素数を%とsの間に指定する。
例えば、要素数が32なら、「%32s」と指定する。それ以上の文字は切り捨てられる。
これにより暴走は起こらない。
②この方法では、スペースを入力することができない。
これは、スペースが区切り記号として認識されるから。
これは解決できない。

・文字数を数える
文字配列の先頭からEOSが出現するまでの数を数えるだけ。
for文で、配列要素の中にEOSが出現するまで変数iをひたすら増加させるだけ。
ただ、少し面倒なので文字列の文字数を数えるstrlen関数というものがあるの。
strlen関数を使うには、string.hを#includeする必要がある。

変数=strlen(文字配列);

・文字列の比較
文字配列同士の比較では、==演算子を使うことはできない。
文字配列の中身を比較するには、for文で全要素を比較する必要がある。
文字列の比較ではEOSまでが同じでなければならないので、比較元よりも1文字大きく比較する。

C言語には、文字列を比較するstrcmp関数というものが用意されている。
使用する時は、string.hを#includeすること。

変数=strcmp(文字列1,文字列2);

この関数は、2つの文字配列の中身が同じなら、0を返す。

 

 

 

2020.5.27(水) 

C言語(web記事「苦しんで覚えるC言語」)
●メモリの仕組み
CMOS(シーモス Complementary MOS;相補型MOS)とは、
P型とN型のMOSFETをデジタル回路(論理回路)の論理ゲート等で相補的に利用する回路方式(論理方式)、及びそのような電子回路やICのことである。

・超巨大な1列ロッカー
メモリの中には多くの電子部品が組み込まれていて、その一つ一つが自分自身の状態を持っている。状態とは、オン、オフということ。

電子部品の状態がオンならば1、オフならば0というように、それぞれの部品が、1であるか、0であるかを記憶している。

これは超巨大な1列のロッカーのような構造に例えられる。
メモリが64MBのコンピュータならば、5億個以上のロッカーが並んでいる。
そして、そのロッカーには番号が付けられている。
また、1つ1つのロッカーは荷物という状態を持っている。
荷物が入っていたら1、入っていなかったら0としてカウントする。

コンピュータは、このロッカーに荷物を詰め込んで、数値を記憶する。
全ての数値は、1と0の組み合わせで記憶される。
要するに、コンピュータは数値を2進数で記憶している。

・CPUのビット数
CPUが1回で扱うメモリの2進数での桁数がビット数。
1ビットとは、2進数1桁のことを意味している。

・32ビットのロッカー
32個をひとまとめにして扱うコンピュータを32ビットコンピュータと呼ぶ。
つまり、超巨大な1列ロッカーは32個ずつ仕分けして使えばいい。
でも現実は8個ずつに仕分けされていて、それぞれに番号が付けられている。
8個ずつにデータを区分けするとは、メモリを8ビット単位で取り扱うということ。

8ビットは1バイトと呼ばれていて、コンピュータの基本的な単位となっている。
これは、色々なデータを扱う上で8ビットは都合が良いから。
8ビットで0〜255の数値を表せるので、比較的小さな数値の記憶には最適。
また、2進数で動作するコンピュータには、8ビットはキリのいい桁でもある。

このような事情から実際のコンピュータでのメモリの取り扱いは、ロッカーを8個ずつにまとめて、8個を1単位として番号を割り当てている。
32ビットコンピュータでは、これに32ビットの範囲内で番号が割り当てられている。
10進数で約42億番までの数値を扱うことができる。

 

 

2020.5.28(木) 

C言語(web記事「苦しんで覚えるC言語」)
●変数とメモリの関係
変数はメモリ上に存在する
ポインタという概念を理解するためには、変数がどのようにメモリに格納されているのかを知っておく必要がある。

プログラムで宣言した変数もメモリに番号つきで記憶されている。
ただ、番号で区別するのと分かりにくいから名前をつけているわけ。
実行ファイルにコンパイルすると変数名は番号に変換される。

つまり、全ての変数はメモリに作られていて、
そこでは番号をつけて区別しているということ。

✳︎C言語は、デニス・リッチーという人が自分たちで使うためだけに作ったプログラミング言語。なので、世界中の人々のことを考えて設計されていないし、自分達の都合の良いように作ったのでクセみたいなものがある。
そりゃそうだよね、と。

小さな部品からプレステのゲームに至るまで幅広く使われている。
すげーっす。

・メモリ上の番号を表示する
変数に付けられた番号は、printf関数で%p指定子を使って調べることができる。
変数の前に&をつける必要がある。

メモリ上で変数に付けられた番号のことを「アドレス」と呼ぶ。


◎読書「まつもとゆきひろ コードの世界 スーパー・プログラマになる14の思考法」
●多重継承の問題点3つ
・構成の複雑化
あるクラスのスーパークラス、そのまたスーパークラス、そのまたスーパークラスと複数のスーパークラスがあり、関係が複雑になってしまう。
・優先順位
複雑な関係を持つスーパークラスがあるということはクラス群の優先順位が一目で分からないということ。
・機能の衝突
複数のスーパークラスからメソッドを引き継ぐと、受け継いだメソッドが衝突することがある。同じ名前のメソッドがあった場合にどちらが有効になるのか、一意に定めることができない。

「制約された多重継承」とでも呼ぶべき機能が、
Javaなら、インターフェース、
LispRubyにおける、Mix-in。

 

 

今週は朝型に変えて色々生活が変わりました。

生活のデザインを見直すことって本当に大切だと思いました。

これからも生活について丁寧に考えていきたいです。

 

それでは、また来週!