talosのプログラミング教室

【基本・応用情報技術者】基数変換(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

Java Silver合格への道

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

Java Silverでは「こんなのどこで使うんや!」って問題がよく出るのですが、そういうことは覚えにくいのでブログでまとめることにしました。

talosta.hatenablog.com

talosta.hatenablog.com

talosta.hatenablog.com

talosta.hatenablog.com

talosta.hatenablog.com

talosta.hatenablog.com

talosta.hatenablog.com

talosta.hatenablog.com

talosta.hatenablog.com

talosta.hatenablog.com

talosta.hatenablog.com

Java Silver合格への道 ~Predicateインタフェース~

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

今回はPredicateインタフェースについてです。

Function、Consumer、SupplierはJava Silverの試験範囲に含まれていないので扱いません。

関数型インタフェースについて

Predicateインタフェースはあらかじめ用意された関数型インタフェースの一つです。

関数型インタフェースについては以下の記事で説明しています。

talosta.hatenablog.com

使い方

boolean test(T t)

test()は引数を受け取ってboolean型を返すメソッドです。

import java.util.function.Predicate;

public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ

		Predicate<String> p = str -> str.equals("a");
		if (p.test("a")) {
			System.out.println("YES");
		} else {
			System.out.println("NO");
		}
	}
}

default Predicate and(Predicate other)

二つのPredicate論理積です。

import java.util.function.Predicate;

public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ

		Predicate<String> p1 = str -> str.contains("a");
		Predicate<String> p2 = str -> str.contains("b");
		Predicate<String> p = p1.and(p2);
		if (p.test("abc")) {
			System.out.println("YES");
		} else {
			System.out.println("NO");
		}
	}
}

default Predicate negate()

Predicateの論理否定です。

import java.util.function.Predicate;

public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ

		Predicate<String> p = str -> str.equals("a");
		Predicate<String> _p = p.negate();
		if (_p.test("a")) {
			System.out.println("YES");
		} else {
			System.out.println("NO");
		}
	}
}

default Predicate or(Predicate other)

二つのPredicateの論理和です。

import java.util.function.Predicate;

public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ

		Predicate<String> p1 = str -> str.contains("a");
		Predicate<String> p2 = str -> str.contains("b");
		Predicate<String> p = p1.or(p2);
		if (p.test("az")) {
			System.out.println("YES");
		} else {
			System.out.println("NO");
		}
	}
}

static Predicate isEqual(Object targetRef)

二つの引数が等しいかどうかを判定するメソッドです。

import java.util.function.Predicate;

public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ

		Predicate<String> p = Predicate.isEqual("a");
		if (p.test("a")) {
			System.out.println("YES");
		} else {
			System.out.println("NO");
		}
	}
}

おわりに

今回はPredicateインタフェースについて説明しました。

難しいですが量は少ないのでしっかり覚えておきましょう。


Java Silver合格への道 ~関数型インタフェースとラムダ式~

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

今回は関数型インタフェースとラムダ式についてです。

関数型インタフェースとは

抽象メソッドが1つだけのインタフェースのことを関数型インタフェースといいます。

関数が「入力が1つに決まると出力も1つに決まるもの」であることを考えると覚えやすいと思います。

ラムダ式

Java8から追加された機能です。

ラムダ式を使うことで関数型インタフェースを簡潔に実装することができます。

違いを表すためにまずは従来の方法で実装してみます。

public interface SampleInterface {

	void output(String str);
}
public class SampleClass implements SampleInterface {

	@Override
	public void output(String str) {
		// TODO 自動生成されたメソッド・スタブ

		System.out.println(str);
	}

}
public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ

		SampleClass sc = new SampleClass();
		sc.output("Hello, world!");
	}

}

こんな簡単な処理を行うだけでも、わざわざクラスを1つ作る必要があります。


続いてラムダ式を使用した実装です。
(インタフェースは同じなので省略します)

public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ

		SampleInterface si = (String str) -> {
			System.out.println(str);
		};
		si.output("Hello, world!");
	}

}

ラムダ式を使うとこのように呼び出し元だけで完結します。
(SampleClassが不要になりました)

しかももっと簡潔に書くこともできます。

public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ

		SampleInterface si = str -> System.out.println(str);
		si.output("Hello, world!");
	}

}


省略できるポイント

1. 引数の型を省略できる
2. 引数が1つで型を省略する場合は()を省略できる
3. 処理が1つの場合は{}を省略できる(※)

※ 処理がreturnの場合は必ずreturnも省略する必要があります。
例:SampleInterface si = str -> {return str}; 
  ⇒ ○ SampleInterface si = str -> str;
    × SampleInterface si = str -> return str;

おわりに

今回は関数型インタフェースとラムダ式について説明しました。

難しいですが少しでも合格の可能性を上げるためにはできるようにしておきましょう。