talosのプログラミング教室

【基本・応用情報技術者】論理式の公式

こんにちは。たろすです。

今回は論理演算の公式について説明します。

論理式

論理式とは以下のようなもの指します。

 (A+B) \cdot C+A \cdot B+\overline{C}

・は「かつ」、+は「または」、上線は「否定」を表します。

「かつ」に \land、「または」に \lor、「否定」に \lnotを使うこともあります。

また、排他的論理和(AかBのどちらか一方のみが真のときは真になる)には \oplusを使うので覚えておきましょう。

論理式の公式

論理式の公式には以下のようなものがあります。


恒等則  A \cdot 0=0
 A \cdot 1=A
 A+0=A
 A+1=1
同一則  A \cdot A=A
 A+A=A
交換則  A \cdot B=B \cdot A
 A+B=B+A
結合則  A \cdot (B \cdot C)=(A \cdot B) \cdot C
 A+(B+C)=(A+B)+C
分配則  A \cdot (B+C)=A \cdot B+A \cdot C
 A+(B \cdot C)=(A+B) \cdot (A+C)
吸収則  A \cdot (A+B)=A
 A+(A \cdot B)=A
 A \cdot (\overline{A}+B)=A・B
 A+(\overline{A} \cdot B)=A+B
矛盾則  A \cdot \overline{A}=0
排中則  A+\overline{A}=1
二重否定  \overline{\overline{A}}=A
ド・モルガンの法則  \overline{A \cdot B}=\overline{A}+\overline{B}
 \overline{A+B}=\overline{A} \cdot \overline{B}

特にド・モルガンの法則はよく問われるので必ず覚えておきましょう。

例題

問題

 (A+B) \cdot C+\overline{A \cdot C} \cdot A A+B \cdot Cに変形せよ。

答え


\begin{eqnarray}
(A+B) \cdot C+\overline{A \cdot C} \cdot A &=& A \cdot C+B \cdot C+\overline{A \cdot C} \cdot A \\

&=& A \cdot C+B \cdot C+(\overline{A}+\overline{C}) \cdot A \\

&=& A \cdot C+B \cdot C+A \cdot \overline{A}+A \cdot \overline{C} \\

&=& A \cdot C+B \cdot C+0+A \cdot \overline{C} \\

&=& A \cdot C+B \cdot C+A \cdot \overline{C} \\

&=& A \cdot (C+ \overline{C})+B \cdot C \\

&=& A \cdot 1+B \cdot C \\

&=& A+B \cdot C \\

\end{eqnarray}

おわりに

今回は論理式の公式について説明しました。

基本情報技術者試験応用情報技術者で必ず1問は出てくるのでできるようにしておきましょう。

【基本・応用情報技術者】浮動小数点数(2進数の浮動小数点表示)

こんにちは。たろすです。

今回は浮動小数点について説明します。

浮動小数点数

浮動小数点数は次のような形式で表します。

 X = (-1)^S ×M × 2^E

Mを仮数、2を基数、Eを指数と呼びます。

また、Sが0のときは1となるので符号は正、Sが1のときは-1となるので符号は負となります。

 (110100.1)_2浮動小数点数で次のように表せます。

 11010.01 × 2^1
 110100.1 × 2^0
 1101001.0 × 2^{-1}

IEEE方式

IEEE方式は次のような形式で浮動小数点数を表す方式です。

f:id:talosta:20210307215322p:plain

 (110100.1)_2IEEE方式で表すには次のようにします。

1. 整数部が1になるように形式を変える

 2^5 × (1.101001)_2

2. 指数部をE-127の形式に変える

 2^{(132-127)} × (1.101001)_2

3.符号を (-1)^Sの形式に変える

 (-1)^0 × 2^{(132-127)} × (1.101001)_2

4. それぞれをフォーマットに当てはめる

f:id:talosta:20210321183521p:plain

おわりに

今回は浮動小数点数について説明しました。

よく出る部分なのでしっかり覚えておきましょう。

【基本・応用情報技術者】2進数の負数表現

こんにちは。たろすです。

今回は2進数の負数表現について説明します。

2進数の負数表現には二種類あるのでそれぞれ説明していきます。

1の補数

n桁の2進数kの1の補数は「kをビット反転した値」です。

例えば86を8桁の2進数にすると (01010110)_2なので、-86の1の補数は (10101001)_2になります。

2の補数

n桁の2進数kの2の補数は「1の補数+1」です。

つまり86の2の補数は (10101001)_2に1を足して (10101010)_2です。

計算してみる

本当に計算できるのか確かめてみましょう。

計算するときは2の補数を使います。

例として88-86を計算してみます。

88-86は88+(-86)と置き換えることができるので、88と-86をそれぞれ8桁の2進数にして加算してみます。

f:id:talosta:20210307190252p:plain

8桁の計算をしているため9桁目以降は無視します。

そのため結果は (00000010)_2となり、10進数で表すと2になります。

正しく計算できることが確かめられました。

おわりに

今回は2進数の負数表現を説明しました。

基本情報技術者試験応用情報技術者試験ではよく問われるのでしっかり覚えておきましょう。

【基本・応用情報技術者】基数変換(10進数から2進数/8進数/16進数への変換)

こんにちは。たろすです。

今回は基数変換(10進数から2進数/8進数/16進数/n進数への変換)について説明します。

2進数/8進数/16進数/n進数から10進数への変換についてはこちらで説明しています。

talosta.hatenablog.com


整数部の変換

10進数 ⇒ 2進数

10進数からn進数に変換する方法です。

例えば52を2進数にします。

f:id:talosta:20210218224002p:plain

2で割れなくなるまで割り続け、割れなくなったらあまりを順に読み上げるだけです。

つまり52を2進数にすると「110100」になります。

10進数 ⇒ 8進数

2進数のときは2で割り続けましたが、8進数のときは8で割り続けます。

f:id:talosta:20210218224019p:plain

375を8進数にすると「567」になります。

10進数 ⇒ 16進数

16進数のときは16で割り続けます。

f:id:talosta:20210218224030p:plain

924を16進数にすると「39C」になります。

※ 16進数ではA⇔10、B⇔11、C⇔12、D⇔13、E⇔14、F⇔15と対応しています。併せて覚えておきましょう。

小数部の変換

小数部は整数部とは別で計算する必要があります。

例えば0.625を2進数にするときは以下のように計算します。

f:id:talosta:20210218224856p:plain

0.625は2進数にすると「0.101」になります。

8進数では8、16進数では16を小数部が0になるまでかけ続ければOKです。

おわりに

今回は10進数からn進数への変換を説明しました。

基本情報技術者試験応用情報技術者試験ではよく問われるのでしっかり覚えておきましょう。

2進数/8進数/16進数/n進数から10進数への変換についてはこちらで説明しているので、よかったらこちらも読んでみてください。

talosta.hatenablog.com

新卒のお金事情~少しでも得するためにやっていること~

こんにちは。たろすです。

私が社会人になりもうすぐ1年になります。

その社会人生活をする中で気づいたことがあります。

そう、お金が足りないんです。

とてもじゃないけど老後に2000万円なんて貯められないです。

そこで私がお金を貯めるためにやっていることを紹介します。

これだけは必ずやって!

楽天に登録

楽天をうまく活用するとポイントをたくさん貯められます。

「ポイントなんて貯めても大した額にならないでしょ?」なんて思ってはいけません。

楽天のサービスはたくさんありますが、使えば使うほど楽天市場のポイント倍率は高くなり、私の場合はひと月に数千円は貯まります。

楽天市場の場合、Amazonより元が高いのですが、0か5が付く日にキャンペーンに申し込んでから買い物するとポイントが5倍になるので、ポイントを加味するとAmazonより安くなることもあります。

そしてポイントを貯められるのは楽天市場で買い物をしたときだけではないのです。

楽天カードを利用

楽天市場で買い物するなら欠かせないのが楽天カードです。

先程紹介したポイント5倍キャンペーンは楽天カードがないと参加できません。

さらに楽天カードを使って楽天市場で買い物するだけでポイントが+2倍になります。

また、楽天カードは普通の買い物でも還元率1%と、永年無料のクレジットカードのなかではトップクラスの還元率です。

そしてなんと言ってもこの選べるデザインの多さ。

この中から好きなデザインを選べます。
(普通のクレジットカードのようなシンプルなデザインも選べます)

f:id:talosta:20210227105139p:plain

とりあえず楽天カードは持っておいて損はありません。

ふるさと納税

ふるさと納税だけは必ずやってほしい of 必ずやってほしいです。

なぜなら払った税金がモノで返ってくるからです。

新卒でも25,000円くらいはできます。
(所得によって返ってくる額は変わるので、計算してからやりましょう)

そして楽天に登録したなら楽天ふるさと納税ふるさと納税をするのがおすすめです。

楽天市場での買い物同様ポイントが貯まり、各種キャンペーンも適用できるからです。

そのため、ふるさと納税は2000円の自己負担がありますが、ポイントで全部返ってきます。

損をすることは絶対にないので、ふるさと納税は必ずやりましょう。

すぐにお金がほしいなら

仮想通貨

コインチェック

すぐにお金がほしいなら仮想通貨への投資が手っ取り早いです。

株式投資などと比べると値の動きが大きいため、短時間でお金を増やすことができます。

もちろん値が下がれば損をすることになるので、そこだけは注意しましょう。

仮想通貨をやるならコインチェックがおすすめです。

こつこつ貯めるなら

スマホ決済

PayPay-ペイペイ(キャッシュレスでスマートにお支払い)

PayPay-ペイペイ(キャッシュレスでスマートにお支払い)

PayPay Corporation無料posted withアプリーチ

ポイント自体はクレジットカードとほとんど変わらないので気休め程度ですが、キャンペーンをよくやっているので登録だけしておくのはありです。

とくにPayPayは全額返金キャンペーンなどお得なキャンペーンが結構頻繁にくるのでおすすめです。

楽天銀行

はっきり言って他行に預けておく理由がないくらい楽天銀行はサービスが良いです。

楽天銀行の良いところは5つあります。


1.普通預金金利が高い

一般的な銀行の普通預金金利は年0.02%ですが、楽天銀行普通預金金利は最高で年0.10%です。


2.ATM手数料が最大月7回まで無料

楽天銀行はネットバンクなのでコンビニなどのATMを利用することになるのですが、最大月7回まで無料で使えます。

月7回も使えれば困ることはなさそうです。


3.他行振込手数料が最大月3回まで無料

社会人になるとさまざまなところに振り込むようになりますが、同じ銀行でも同じ支店でないと手数料がかかります。

楽天銀行なら月3回まで無料で振り込めます。


4.楽天ポイントが貯まる

振込や入金、支払いなど事あるごとにポイントをもらえます。

あまり多くはないですが、得しかないのでうれしいです。


5.楽天市場のポイント倍率が+1倍になる

これも何気にうれしいですね。

将来への投資

つみたてNISA

つみたてNISAは絶対に損はしないとまでは言えませんが、リスクが少ない投資です。

20年間は税金もかからないので、強くおすすめしたいです。

さらに楽天証券でつみたてNISAをすると100円につき1ポイント貯まり、楽天市場での買い物のポイント倍率も+1倍になります。

ちなみにiDeCoもありですが、私は企業型確定拠出型年金をやっているのでiDeCoはやっていません。

株式投資

実はまだ自分のお金で株式投資はしていません。

LINE証券でクイズに正解すると3株無料で貰えるキャンペーンがやっていたので始めてみました。

あまり期待はしていません。

たぶん本格的に投資することになったら楽天証券でやるかなーと思います。

持ち株制度の利用

会社の持ち株制度を利用しています。

コロナ禍で株価は下がっていますが、奨励金があるので得しています。

おわりに

改めて楽天は最強ということがわかりました。

ディープラーニングの仕組みを中学生でもわかるように説明してみる

こんにちは。たろすです。

ディープラーニングって最近よく聞きますよね。

ディープラーニングがなんなのかわはわかるけど、いざ勉強するとなると数式がたくさん出てきてよくわからないって方も多いと思います。

でもやってることはとても単純です。

そこで今回は中学生でもわかるように仕組みを説明しようと思います。

ディープラーニングに限らずほとんどの教師あり学習に当てはまる説明です。

そもそもディープラーニングとは?

ディープラーニング機械学習の一種です。

さらに言うと(多くは)教師あり学習の一種です。
強化学習DQNというものもあります)

教師あり学習とは
「Aという問題が出されたBという答えを出す」
のようなパターンをたくさん機械に学習させる方法です。

機械学習の仕組み

それではどのようにしてそのパターンを学習するのでしょうか?

スポーツを例に挙げてみましょう。

あなたはプロを目指してサッカーをしています。

f:id:talosta:20210214184724p:plain

プロになるためにはどうすればよいでしょうか?

ひとつの方法として憧れの選手をマネするということが考えられます。

f:id:talosta:20210214183305p:plain

もちろん1日では上手くなれません。

だから毎日練習して少しずつ憧れの選手に近づいていきます。

f:id:talosta:20210214185815p:plain

では「マネする」とは具体的にどうやって行うのでしょうか。

プロに限らずすべてのサッカー選手は、「こういう場面ではこういう行動をする」という方針を持っていると思います。

その方針をプロのそれに近づけていくことで、プロのマネをします。

これがディープラーニング(主な教師あり学習)のやっていることです。

「こういう場面ではこういう行動をする」という方針は、ひとつの入力に対してひとつの出力を出すので関数であると見ることができます。

「プロの関数(方針)に自分の関数(方針)を近づけることでプロのマネをしよう」というのがディープラーニング(主な教師あり学習)です。

f:id:talosta:20210214185446p:plain

ちなみに、マネはしないけど、監督に褒められたプレーをたくさんするように方針を変えていくのが強化学習です。

おわりに

いかかでしたでしょうか。

この記事を読んで、なんとなくディープラーニングの仕組みを理解していただけたら嬉しいです。

こちらの記事ではもう少し詳しくディープラーニングについて説明しているので、興味を持ったらぜひ読んでください。

talosta.hatenablog.com

【基本・応用情報技術者】基数変換(2進数/8進数/16進数/n進数から10進数への変換)

こんにちは。たろすです。

今回は基数変換(2進数/8進数/16進数/n進数から10進数への変換)について説明します。

n進数 ⇒ 10進数

n進数から10進数に変換する方法です。

 (3827.56)_n = 3 * n^3 + 8 * n^2 + 2 * n^1 + 7 * n^0 + 5 * n^{-1} + 6 * n^{-2}

まず注目すべきは1の位の「7」です。

「7」に n^0を掛けます。

続いて十の位の「2」に注目します。

「2」に n^1を掛けます。

次の「8」には n^2、さらに次の「3」には n^3を掛けます。

続いて小数点以下について計算します。

小数点第一位の「5」に n^{-1}を、小数点第二位の「6」に n^{-2}を掛けます。

今まで計算したものをすべて足すと答えになります。

まとめると、


n進数 ⇒ 10進数

1. 一の位に n^0を掛ける
2. 一の位を中心に
 ・桁が一つ大きくなるたびに指数を1大きくした数を掛ける
 ・桁が一つ小さくなるたびに指数を1小さくした数を掛ける
3. すべての積を足す

それでは実際に計算してみましょう。

2進数 ⇒ 10進数

 \begin{eqnarray}
(1101.01)_2 &=& 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 + 0 * 2^{-1} + 1 * 2^{-2} \\
&=& 1 * 8 + 1 * 4 + 0 * 2 + 1 * 1 + 0 * 0.5 + 1 * 0.25 \\
&=& 8 + 4 + 0 + 1 + 0 + 0.25 \\
&=& 13.25
\end{eqnarray}

8進数 ⇒ 10進数

 \begin{eqnarray}
(175)_8 &=& 1 * 8^2 + 7 * 8^1 + 5 * 8^0 \\
&=& 1 * 64 + 7 * 8 + 5 * 1 \\
&=& 64 + 56 + 5 \\
&=& 125
\end{eqnarray}

16進数 ⇒ 10進数

 \begin{eqnarray}
(2A)_16 &=&  2 * 16^1 + 10 * 16^0 \\
&=& 2 * 16 + 10 * 1 \\
&=& 32 + 10 \\
&=& 42
\end{eqnarray}

※ 16進数ではA⇔10、B⇔11、C⇔12、D⇔13、E⇔14、F⇔15と対応しています。併せて覚えておきましょう。

おわりに

今回はn進数から10進数への変換を説明しました。

基本情報技術者試験応用情報技術者試験ではよく問われるのでしっかり覚えておきましょう。

10進数から2進数/8進数/16進数への変換についてはこちらで説明しているので、よかったらこちらも読んでみてください。

talosta.hatenablog.com