<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>基礎理論 | 基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</title>
	<atom:link href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/tag/%E5%9F%BA%E7%A4%8E%E7%90%86%E8%AB%96/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi</link>
	<description>基本情報技術者試験を学習する人のためにつくられた専門メディア。250本以上の記事を掲載し、勉強方法や各分野のポイント、過去問解説など、試験に役立つ情報を発信。試験対策書籍を執筆する著者が、はじめて学ぶ人でもわかりやすく解説します。（2023年度からの新制度に対応済み）</description>
	<lastBuildDate>Mon, 20 Apr 2026 07:08:52 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.9.29</generator>
	<item>
		<title>標準偏差と正規分布｜やさしい基礎理論（最終回）</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/standarddeviation-normaldistribution/</link>
		<pubDate>Mon, 23 Dec 2024 02:00:18 +0000</pubDate>
		<dc:creator><![CDATA[基本情報技術者試験 受験ナビ 編集部]]></dc:creator>
				<category><![CDATA[基礎理論]]></category>
		<category><![CDATA[過去問演習]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/?post_type=kind_basic_theory&#038;p=8504</guid>
		<description><![CDATA[<p>この連載は、基本情報技術者試験の受験者を対象としたものです。 多くの受験者が苦手としている「情報の基礎理論」の分野から毎回１つずつテーマをあげて、やさしくポイント解説と問題解説を行います。 苦手分野を克服して、試験の得点 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/standarddeviation-normaldistribution/">標準偏差と正規分布｜やさしい基礎理論（最終回）</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>
この連載は、基本情報技術者試験の受験者を対象としたものです。<br />
多くの受験者が苦手としている「情報の基礎理論」の分野から毎回１つずつテーマをあげて、やさしくポイント解説と問題解説を行います。<br />
苦手分野を克服して、試験の得点をアップしましょう。
</p>
<p>今回のテーマは、前々回と前回に引き続いて数学のテーマである <span class="bold">「標準偏差」</span>と<span class="bold">「正規分布」</span> です。</p>
<h2>標準偏差</h2>
<p>
「<strong>標準偏差</strong>」とは、データ全体のばらつきを示す値です。<br />
たとえば、5人の学生のテストの得点のデータが、以下だとしましょう。
</p>
<table border="1" style="border-collapse: collapse; width: 50%;">
<tr>
<td style="padding: 8px;">学生</td>
<td style="padding: 8px;">A</td>
<td style="padding: 8px;">B</td>
<td style="padding: 8px;">C</td>
<td style="padding: 8px;">D</td>
<td style="padding: 8px;">E</td>
</tr>
<tr>
<td style="padding: 8px;">得点</td>
<td style="padding: 8px;">50</td>
<td style="padding: 8px;">55</td>
<td style="padding: 8px;">60</td>
<td style="padding: 8px;">65</td>
<td style="padding: 8px;">70</td>
</tr>
</table>
<p>
平均は、以下のように、すべてのデータを加算してデータ数の5で割って得られ、60点です。<br />
平均＝(50＋55＋60＋65＋70)÷5＝60点
</p>
<p>
それぞれのデータと平均の差を「偏差」と呼びます。</p>
<p>すべてデータの偏差の平均を求めれば、データ全体のばらつきを示せると思われるかもしれませんが、それは上手くいきません。<br />
偏差には、プラスとマイナスがあるので、単純にすべてのデータの偏差の平均値を求めたのでは、プラスとマイナスが打ち消し合ってしまうからです。</p>
<p>5人の学生の偏差は、以下のように、－10、－5、0、5、10なので、偏差の平均が0になってしまいます。</p>
<table border="1" style="border-collapse: collapse; width: 50%;">
<tr>
<td style="padding: 8px;">学生</td>
<td style="padding: 8px;">A</td>
<td style="padding: 8px;">B</td>
<td style="padding: 8px;">C</td>
<td style="padding: 8px;">D</td>
<td style="padding: 8px;">E</td>
</tr>
<tr>
<td style="padding: 8px;">得点</td>
<td style="padding: 8px;">50</td>
<td style="padding: 8px;">55</td>
<td style="padding: 8px;">60</td>
<td style="padding: 8px;">65</td>
<td style="padding: 8px;">70</td>
</tr>
<tr>
<td style="padding: 8px;">偏差</td>
<td style="padding: 8px;">−10</td>
<td style="padding: 8px;">−5</td>
<td style="padding: 8px;">0</td>
<td style="padding: 8px;">5</td>
<td style="padding: 8px;">10</td>
</tr>
</table>
<p>
そこで、偏差を2乗した値の平均値の平方根で、データ全体のばらつきを示すことにしましょう。</p>
<p>2乗するのは、プラスもマイナスも、2乗すれば、すべてプラスになるからです。<br />
平方根にするのは、2乗した値を元に戻すためです。これが「標準偏差」です。</p>
<p>5人の学生の偏差の2乗は、以下のように、100、25、0、25、100となり、すべてプラスの値です。
</p>
<table border="1" style="border-collapse: collapse; width: 50%;">
<tr>
<td style="padding: 8px;">学生</td>
<td style="padding: 8px;">A</td>
<td style="padding: 8px;">B</td>
<td style="padding: 8px;">C</td>
<td style="padding: 8px;">D</td>
<td style="padding: 8px;">E</td>
</tr>
<tr>
<td style="padding: 8px;">得点</td>
<td style="padding: 8px;">50</td>
<td style="padding: 8px;">55</td>
<td style="padding: 8px;">60</td>
<td style="padding: 8px;">65</td>
<td style="padding: 8px;">70</td>
</tr>
<tr>
<td style="padding: 8px;">偏差</td>
<td style="padding: 8px;">−10</td>
<td style="padding: 8px;">−5</td>
<td style="padding: 8px;">0</td>
<td style="padding: 8px;">5</td>
<td style="padding: 8px;">10</td>
</tr>
<tr>
<td style="padding: 8px;">偏差の2乗</td>
<td style="padding: 8px;">100</td>
<td style="padding: 8px;">25</td>
<td style="padding: 8px;">0</td>
<td style="padding: 8px;">25</td>
<td style="padding: 8px;">100</td>
</tr>
</table>
<p>
標準偏差は、以下のように、偏差の2乗の平均値の平方根であり、約7.1点です。<br />
標準偏差＝√(100＋25＋0＋25＋100)÷5＝√50≒7.1点
</p>
<h2>正規分布</h2>
<p>
世の中のデータは、様々なばらつきを示します。<br />
ばらつきのことを「<strong>分布</strong>」とも呼びます。<br />
分布の形態を、数式でモデル化したものがいくつかあります。</p>
<p>「正規分布」は、その１つであり、平均値と標準偏差を使った数式（複雑な数式なので、ここでは紹介しません）で示される分布です。<br />
テストの得点の分布、身長や体重の分布、製品の重さの分布などは、正規分布によく合うことが知られています。</p>
<p>正規分布をグラフ（横軸をデータの値、縦軸をデータ数としたグラフ）に示すと、以下のように、平均値を中心として左右対称の釣り鐘型になります。
</p>
<figure style="display:block;width:100%; max-width:400px;margin: 0 auto;">
<div class="material-placeholder"><img src="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/wp-content/uploads/2024/12/795316b92fc766b0181f6fef074f03fa.jpg" alt=""></div>
</figure>
<p>
正規分布は、平均値と標準偏差を使った数式で示される分布なので、その数式を積分して面積を求めることで、平均±σ、平均±2σ、平均±3σの範囲に、全体の何%のデータが入るかを求められます。</p>
<p>以下のように、平均±σに約68%、平均±2σに約95%、平均±3σに約99.7%のデータが入ります。<br />
ここで、ギリシャ文字のσ（シグマ）は、標準偏差を意味しています。
</p>
<figure style="display:block;width:100%; max-width:400px;margin: 0 auto;">
<div class="material-placeholder"><img src="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/wp-content/uploads/2024/12/2b530e80c7d0de90885e285c5d798063.jpg" alt=""></div>
</figure>
<h2>標準偏差と正規分布に関する問題の例（その1）</h2>
<p>
標準偏差と正規分布に関する問題を2つ紹介しましょう。<br />
はじめは、正規分布のグラフを選ぶ問題です。
</p>
<div class="card-panel mag_h30 c-round">
<p><span class="chip">問1（出典：R01秋問5）</p>
<p>平均が60、標準偏差が10の正規分布を表すグラフはどれか。</p>
<figure style="display:block;width:100%; max-width:600px;margin: 0 auto;">
<div class="material-placeholder"><img src="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/wp-content/uploads/2024/12/138a6c58f28316f3edc948eea0a51128.jpg" alt=""></div>
</figure>
</div>
<p>
正規分布のグラフは、平均を中心として左右対称の釣り鐘型になります。</p>
<p>ここでは、平均が60です。60を中心として左右対称の釣り鐘型になっているのは、選択肢アと選択肢イです。</p>
<p>正規分布のグラフでは、平均±σの範囲に、全体の約68%のデータが入ります。<br />
ここでは、平均が60で標準偏差が10なので、60±10の範囲に、全体の約68%のデータが入ります。<br />
これに該当するのは、選択肢イよりは選択肢アでしょう。<br />
選択肢イには、60±10の範囲に、全体の約68%より多くのデータ（見た感じで80%程度）が入ります。</p>
<p>したがって、選択肢アが正解です。
</p>
<h2>標準偏差と正規分布に関する問題の例（その2）</h2>
<p>
次は、標準偏差から製品の不合格品の割合を求める問題です。</p>
<div class="card-panel mag_h30 c-round">
<p><span class="chip">問2（出典：H19春問8）</p>
<p>ある工場で大量に生産されている製品の重量の分布は、平均が5.2㎏、標準偏差が0.1㎏の正規分布であった。<br />
5.0㎏未満の製品は、社内検査で不合格とされる。<br />
生産された製品の不合格品の割合は約何％か。</p>
<figure style="display:block;width:100%; max-width:600px;margin: 0 auto;">
<div class="material-placeholder"><img src="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/wp-content/uploads/2024/12/fb127d914c59745c3dbdfe2bb12b9883.jpg" alt=""></div>
</figure>
<p>ア：0.159<br />
イ：0.6<br />
ウ：2.3<br />
エ：6.7</p>
</div>
<p>
問題に示された「標準正規分布表」は、平均が0で標準偏差が1の正規分布（これを標準正規分布と呼びます）において、μ以上のP（問題のグラフに示されたP）の部分に入るデータの割合を示したものです。</p>
<p>標準正規分布表があれば、「正規分布では、平均±σの範囲に全体の約68%のデータが入り、平均±2σの範囲に全体の約95%のデータが入り、平均±3σの範囲に全体の約99.7%のデータが入る」ということを覚えていなくても、特定の範囲に入るデータの割合を求めることができます。</p>
<p>ここでは、製品の重量の分布が、平均が5.2kgで標準偏差が0.1kgの正規分布であり、5.0kg未満の製品が不合格とされます。<br />
5.0kgは、平均の5.2kgから標準偏差0.1kgの2個分離れています。<br />
これを下回るのは、標準正規分布表のμが2.0の部分を見ると、0.023だとわかります（問題に示されたグラフではμを超えた部分をPとしていますが、正規分布のグラフは左右対称なので、－μを下回った部分も同じ割合です）。</p>
<p>したがって、製品の不合格品の割合は2.3%であり、選択肢ウが正解です。
</p>
<div class="divider mag_tp50 mag_bt30"></div>
<p>基本情報技術者試験の公開問題を見ると、過去問題（過去の試験に出題された問題）の再利用が多いことがわかります。<br />
したがって、試験に合格するために最も効率的で効果的な学習方法は、過去問題を数多く解き、できなかった問題があれば、できるようになるまで練習することです。<br />
もしも、今回取り上げた問題がすぐにできなかったら、できるようになるまで練習してください。
</p>
<p>
この連載は、今回で最終回です。<br />
これまで連載をお読みいただいた皆様に、この場をお借りして厚く御礼申し上げます。</p>
<p>それでは、またまたどこかでお会いしましょう！</p>
<style>pre{background:#263238!important;border-radius:unset;}pre:not([class*="language-"]){font-family:'Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;color:#ccc;font-size:1em;padding:1em;}ol.background{padding-left:3em!important;}@media only screen and (max-width:600px){ol{padding-left:1em}dd{margin-left:2em}}.underline{border-bottom:1px solid;}code{padding: 0.15em 0.25em;}pre, code{background: #263238;color: #eceff1;border-radius: unset;font-size: 1em;line-height: 1.8;position: relative;}article, pre, code {
    font-family: 'consolas','Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;
}
img{width: 100%;}
article, pre, code {font-family: "Courier New","HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;}
</style><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/standarddeviation-normaldistribution/">標準偏差と正規分布｜やさしい基礎理論（最終回）</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>確率｜やさしい基礎理論</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/probability/</link>
		<pubDate>Tue, 26 Nov 2024 04:50:03 +0000</pubDate>
		<dc:creator><![CDATA[基本情報技術者試験 受験ナビ 編集部]]></dc:creator>
				<category><![CDATA[基礎理論]]></category>
		<category><![CDATA[過去問演習]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/?post_type=kind_basic_theory&#038;p=8485</guid>
		<description><![CDATA[<p>この連載は、基本情報技術者試験の受験者を対象としたものです。 多くの受験者が苦手としている「情報の基礎理論」の分野から毎回１つずつテーマをあげて、やさしくポイント解説と問題解説を行います。 苦手分野を克服して、試験の得点 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/probability/">確率｜やさしい基礎理論</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>
この連載は、基本情報技術者試験の受験者を対象としたものです。<br />
多くの受験者が苦手としている「情報の基礎理論」の分野から毎回１つずつテーマをあげて、やさしくポイント解説と問題解説を行います。<br />
苦手分野を克服して、試験の得点をアップしましょう。
</p>
<p>今回のテーマは、 前回に引き続いて数学のテーマである<span class="bold">「確率」</span> です。</p>
<div class="divider mag_tp50 mag_bt30"></div>
<h2>基本的な確率の求め方</h2>
<p>
たとえば、サイコロ（一般的な6面のサイコロ）を1回振ると、出る目のパターンは1、2、3、4、5、6の6通りです。<br />
確率の分野では、それぞれのパターンのことを事象と呼びます。<br />
確率は、<span class="u">「目的の事象の数／すべての事象の数」</span>という計算で求めます。
</p>
<p>
たとえば、サイコロを1回振って3が出る確率は、3が出る事象の数が1通りで、すべての事象の数が6通りなので、1／6です。<br />
サイコロを1回振って偶数が出る確率は、偶数が出る事象の数が3通り（2が出る、4が出る、6が出る）で、すべての事象の数が6通りなので、3／6＝1／2です。</p>
<p>事象の数を求めるときに、前回の記事で取り上げた順列や組み合わせの考え方を使う場合もよくあります。</p>
<p>たとえば、<a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/permutations-combinations" rel="noopener" target="_blank"><u>前回の記事</u></a>で「男子3人、女子5人の中から3人を選ぶとき、男子が少なくとも1人含まれる選び方は何通りあるか（出典：H18秋問7）」という組み合わせの問題を紹介しました。<br />
これを「男子3人、女子5人の中から3人を選ぶとき、男子が少なくとも1人含まれる確率を求めよ」にアレンジすれば、確率の問題になります。</p>
<p>男女8人の中から3人を選ぶ組合せ（すべての事象の数）は、(8×7×6)／(3×2×1)＝56通りです。<br />
女子5人の中から3人を選ぶ組合せ（女子だけの事象の数）は、(5×4×3)／(3×2×1)＝10通りです。<br />
男女8人の中から3人を選んだ組み合わせの中で、男子が少なくとも1人含まれている組み合わせ（男子が含まれている事象の数）は、56－10＝46通りです。</p>
<p>したがって、その確率は、46／56です。</p>
<h2>確率の加法定理と乗法定理</h2>
<p>
事象Aまたは事象Bが起きる確率は、事象Aが起きる確率と事象Bが起きる確率の加算で得られます。<br />
これを、<span class="bold">確率の加法定理</span>と呼びます。</p>
<p>たとえば、サイコロを1回振って3または5が出る確率は、3が出る確率が1／6で、5が出る確率が1／6なので、両者を加算した(1／6)＋(1／6)＝2／6＝1／3です。</p>
<p>事象Aが起こり、続けて事象Bが起きる確率は、事象Aが起きる確率と事象Bが起きる確率の乗算で得られます。<br />
これを、<span class="bold">確率の乗法定理</span>と呼びます。</p>
<p>たとえば、サイコロを1回振って3が出て、続けてもう1回振って5が出る確率は、3が出る確率が1／6で、続けて5が出る確率が1／6なので、両者を乗算した(1／6)×(1／6)＝1／36です。</p>
<p>確率の加法定理と乗法定理は、組み合わせて使う場合もよくあります。</p>
<p>たとえば、サイコロを1回振って3か5が出て、続けてもう1回振って2か4が出る確率は、3か5が出る確率が加法定理で(1／6)＋(1／6)＝2／6＝1／3であり、2か4が出る確率が加法定理で(1／6)＋(1／6)＝2／6＝1／3なので、それらが続けて起きる確率は、乗法定理で(1／3)×(1／3)＝1／9です。</p>
<h2>確率に関する問題の例（その1）</h2>
<p>確率に関する問題を2つ紹介しましょう。<br />
はじめは、基本的な確率の求め方で解く問題です。</p>
<div class="card-panel mag_h30 c-round">
<p><span class="chip">問1（出典：R01秋問6）</p>
<p>Random(n)は、0以上n未満の整数を一様な確率で返す関数である。整数型の変数A，B及びCに対して次の一連の手続きを実行したとき、Cの値が0になる確率はどれか。</p>
<p>                       A＝Random(10)<br />
                       B＝Random(10)<br />
                       C=A-B</p>
<p>ア　　1／100<br />
イ　　1／20<br />
ウ　　1／10　　　　<br />
エ　　1／5<br />
</span></p>
</div>
<p>
Random(n)は、0以上n未満の整数を一様な確率で返すので、Random(10)は、0以上10未満の整数（0～9の整数）を一様な確率で返します。</p>
<p>A ＝ Random(10)、B ＝ Random(10)なので、AとBの値は、0～9のいずれかの整数です。<br />
C＝A－Bの値が0になる確率は、A＝Bとなる確率と同じです。</p>
<p>AとBの組み合わせは、Aが0～9の10通りで、Bも0～9の10通りなので、10×10＝100通りです。<br />
これらの組み合わせの中で、A＝Bとなるのは、A＝B＝0、A＝B＝1、A＝B＝2、A＝B＝3、A＝B＝4、A＝B＝5、A＝B＝6、A＝B＝7、A＝B＝8、A＝B＝9の10通りです。</p>
<p>したがって、A＝Bとなる確率は、10通り／100通り＝1／10です。<br />
選択肢ウが正解です。</p>
<h2>確率に関する問題の例（その2）</h2>
<p>
次は、確率の加法定理と乗法定理を使って解く問題です。<br />
問題文の中にある「単純マルコフ過程」とは、直前の状態によって次の状態が決定されるということです。
</p>
<div class="card-panel mag_h30 c-round">
<p><span class="chip">問2（出典：H22秋問3）</p>
<p>表は、ある地方の天気の移り変わりを示したものである。例えば、晴れの翌日の天気は、40％の確率で晴れ、40％の確率で曇り、20％の確率で雨であることを表している。天気の移り変わりが単純マルコフ過程であると考えたとき、雨の2日後が晴れである確率は何％か。</p>
<figure style="display:block;width:100%; max-width:500px;margin: 0 auto;">
<div class="material-placeholder"><img src="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/wp-content/uploads/2024/11/fb127d914c59745c3dbdfe2bb12b9883.jpg" alt=""></div>
</figure>
<p>ア　　15<br />
イ　　27<br />
ウ　　30<br />
エ　　33</p>
</div>
<p>雨の2日後が晴れであるパターンには、以下の3つがあります。</p>
<p>（1）雨→晴れ→晴れ<br />
（2）雨→曇り→晴れ<br />
（3）雨→雨→晴れ</p>
<p>それぞれのパターンの確率は、それぞれの事象（ここでは、晴れ、曇り、雨の天気が事象）が続けて起きる確率なので、確率の乗法定理で求められ、以下のようになります。</p>
<p>（1）雨→晴れ→晴れ・・・雨の翌日晴れ（30%）×晴れの翌日晴れ（40%）＝12%<br />
（2）雨→曇り→晴れ・・・雨の翌日曇り（50%）×曇りの翌日晴れ（30%）＝15%<br />
（3）雨→雨→晴れ・・・雨の翌日雨（20%）×雨の翌日晴れ（30%）＝6%</p>
<p>雨の2日後が晴れである確率は、3つのパターンのいずれかが起きる確率なので、確率の加法定理で求められ、以下のようになります。</p>
<p>12%＋15%＋6%＝33%</p>
<p>したがって、選択肢エが正解です。</p>
<div class="divider mag_tp50 mag_bt30"></div>
<p>基本情報技術者試験の公開問題を見ると、過去問題（過去の試験に出題された問題）の再利用が多いことがわかります。<br />
したがって、試験に合格するために最も効率的で効果的な学習方法は、できなかった問題があれば、できるようになるまで練習することです。<br />
もしも、今回取り上げた問題がすぐにできなかったら、できるようになるまで練習してください。
</p>
<p>それでは、またお会いしましょう！</p>
<style>pre{background:#263238!important;border-radius:unset;}pre:not([class*="language-"]){font-family:'Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;color:#ccc;font-size:1em;padding:1em;}ol.background{padding-left:3em!important;}@media only screen and (max-width:600px){ol{padding-left:1em}dd{margin-left:2em}}.underline{border-bottom:1px solid;}code{padding: 0.15em 0.25em;}pre, code{background: #263238;color: #eceff1;border-radius: unset;font-size: 1em;line-height: 1.8;position: relative;}article, pre, code {
    font-family: 'consolas','Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;
}
img{width: 100%;}
article, pre, code {font-family: "Courier New","HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;}
</style><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/probability/">確率｜やさしい基礎理論</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>場合の数（順列と組み合わせ）｜やさしい基礎理論</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/permutations-combinations/</link>
		<pubDate>Tue, 22 Oct 2024 03:30:20 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[基礎理論]]></category>
		<category><![CDATA[過去問演習]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/?post_type=kind_basic_theory&#038;p=8476</guid>
		<description><![CDATA[<p>この連載は、基本情報技術者試験の受験者を対象としたものです。 多くの受験者が苦手としている「情報の基礎理論」の分野から毎回１つずつテーマをあげて、やさしくポイント解説と問題解説を行います。 苦手分野を克服して、試験の得点 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/permutations-combinations/">場合の数（順列と組み合わせ）｜やさしい基礎理論</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>
この連載は、基本情報技術者試験の受験者を対象としたものです。<br />
多くの受験者が苦手としている「情報の基礎理論」の分野から毎回１つずつテーマをあげて、やさしくポイント解説と問題解説を行います。<br />
苦手分野を克服して、試験の得点をアップしましょう。
</p>
<p>今回のテーマは、 <span class="bold">「場合の数（順列と組み合わせ）」</span> です。</p>
<div class="divider mag_tp50 mag_bt30"></div>
<h2>順列の求め方</h2>
<p>
基本情報技術者試験には、数学の問題が出ることがあります。<br />
主なテーマは、「場合の数」「確率」「統計」などです。</p>
<p>今回は、場合の数を取り上げます。<br />
中学で習ったはずなので、忘れてしまったという人も、ちょっと復習すれば、すぐに思い出せるでしょう。<br />
問題のレベルも中学ぐらいなので、決して難しくありません。
</p>
<p>
場合の数とは、ある事柄について、考えられるすべての場合を数え上げた総数です。<br />
場合の数には、「順列」と「組み合わせ」があります。</p>
<p><strong>順列</strong>は、<span class="u">内容が同じでも、順序が異なれば違うもの</span>とします。<br />
<strong>組み合わせ</strong>は、<span class="u">内容が同じなら、順序が異なっても同じもの</span>とします。</p>
<p>たとえば、A、B、C、D、E、Fの5つのデータの中から3つを選ぶ場合に、順列では、「A、B、C」と「B、A、C」を違うものとしますが、組み合わせでは、それらを同じものとします。
</p>
<p>
はじめに、順列の求め方を説明しましょう。</p>
<p>A、B、C、D、E、Fという5つのデータの中ら3つを選ぶ順列は、1つ目の選び方が5通りで、2つ目の選び方が4通りで（既に5つの中から1つ目を選んでいるので、残りの4つの中から選ぶことになる）、3つ目の選び方が3通りなので（既に5つの中から1つ目と2つ目を選んでいるので、残り3つの中から選ぶことになる）、5×4×3＝60通りです。</p>
<p>5×4×3＝60通りという掛け算は、すべてのパターンを書き出した「樹形図」の枝の総数を求めているといえます。</p>
<p>60通りの樹形図を示すのは、困難なので、例を変えましょう。<br />
図1に、A、B、Cという3つのデータの中ら2つを選ぶ順列（3×2＝6通り）の樹形図を示します。
</p>
<div class="card-panel mag_h30 c-round">
【図1】　3つのデータの中から2つを選ぶ順列の樹形図</p>
<figure style="display:block;width:100%; max-width:300px;margin: 0 auto;">
<div class="material-placeholder"><img src="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/wp-content/uploads/2024/10/795316b92fc766b0181f6fef074f03fa.jpg" alt=""></div>
</figure>
</div>
<p>
1つ目の選び方は3通りなので、これが3つの枝分かれになります。<br />
2つ目の選び方は2通りなので、これが2つの枝分かれになります。<br />
3つに枝分かれしたそれぞれが、さらに2つに枝分かれするので、枝の総数は3×2＝6本であり、順列は3×2＝6通りです。
</p>
<h2>組み合わせの求め方</h2>
<p>
次に、組み合わせの求め方を説明しましょう。</p>
<p>A、B、C、D、E、Fという5つのデータの中ら3つを選ぶ順列は、先ほど説明したように、5×4×3＝60通りです。<br />
この60通りの中から1つのパターンを選んで、同じ内容で順序が異なるパターンがいくつできるかを求めてみましょう。</p>
<p>たとえば、「A、B、C」というパターンは、同じ内容で順序が異なるパターンが「A、B、C」「A、C、B」「B、A、C」「B、C、A」「C、A、B」「C、B、A」の60通りあります。<br />
これは、A、B、Cという3つのデータの中ら3つを選ぶ順列であり、3×2×1＝6通りです。<br />
したがって、5つのデータの中ら3つを選ぶ順列の60通りの中には、同じ内容のものが6つずつあるので、それらを同じものとして1通りと数えれば、60÷6＝10通りとなり、これが組み合わせです。
</p>
<p>
順列と組み合わせの求め方は、公式として示すこともできますが、公式を丸暗記するより感覚的に理解した方がよいでしょう。<br />
暗記は、面白くないし、応用が利かないからです。</p>
<p>これまでの説明をまとめて感覚的に示すと、5つのデータの中ら3つを選ぶ順列は、1つ目が5通り、2つ目が4通り、3つ目が3通りなので、5×4×3＝60通りです。<br />
5つのデータの中ら3つを選ぶ組合せは、順列が5×4×3＝60通りで、同じ内容で順序が異なるパターンが3×2×1＝60通りあるので、60÷6＝10通りです。
</p>
<h2>場合の数に関する問題の例（その1）</h2>
<p>
場合の数に関する問題を2つ紹介しましょう。<br />
以下は、文字列のパターン数を求める問題です。文字列のパターンというものが、順列なのか組み合わせなのかを考えてください。
</p>
<div class="card-panel mag_h30 c-round">
<p><span class="chip">問2（出典：H20春問7）</p>
<p>2個の文字AとBを使って、長さ1以上7以下の文字列は何通りできるか。</p>
<p>ア　　128<br />
イ　　254　　　　<br />
ウ　　255　　　　<br />
エ　　256</p>
</div>
<p>
文字列のパターンは、<strong>順列</strong>です。<br />
なぜなら、長さ2文字の場合、<span class="u">「AB」と「BA」は異なる文字列</span>だからです。</p>
<p>この問題では、長さ1文字以上7文字以下のパターンの総数を求めますが、一気に計算しようと考えずに、1文字なら何パターン、2文字なら何パターン、・・・、7文字なら何パターンと、文字数ごとにパターン数を求めて集計するとよいでしょう。</p>
<p>1文字のパターン数は、「A」と「B」の2通りです。<br />
2文字のパターンは、1文字目が「A」と「B」の2通りで、2文字目も「A」と「B」の2通りなので、2×2＝4通りです。<br />
3文字のパターンは、1文字目が「A」と「B」の2通りで、2文字目も「A」と「B」の2通りで、3文字目も「A」と「B」の2通りなので、2×2×2＝8通りです。</p>
<p>以下同様に、1文字から7文字におけるパターン数を求めると、図ｘｘのようになります。</p>
<p class="grey lighten-5 c-round" style="padding: 1em;">
【図ｘｘ　1文字から7文字におけるパターン数】<br />
1文字	2通り<br />
2文字	2×2＝4通り<br />
3文字	2×2×2＝8通り<br />
4文字	2×2×2×2＝16通り<br />
5文字	2×2×2×2×2＝32通り<br />
6文字	2×2×2×2×2×2＝64通り<br />
7文字	2×2×2×2×2×2×2＝128通り
</p>
<p>すべてのパターン数を集計すると、2＋4＋8＋16＋32＋128＝254通りです。<br />
したがって、選択肢イが正解です。</p>
<h2>場合の数に関する問題の例（その2）</h2>
<p>
以下は、男女8人の中から3人を選ぶという問題です。<br />
3人を選ぶということが、順列なのか組み合わせなのかを考えてください。<br />
この問題には、男子が少なくとも1人含まれるという条件があることにも注意してください。
</p>
<div class="card-panel mag_h30 c-round">
<p><span class="chip">問2（出典：H18秋問7）</p>
<p>男子3人、女子5人の中から3人を選ぶとき、男子が少なくとも1人含まれる選び方は何通りあるか。</p>
<p>ア　　21　　　　<br />
イ　　30　　　　<br />
ウ　　46　　　　<br />
エ　　56</p>
</div>
<p>
<span class="u">3人を選ぶというのは、選ぶだけであり順序を考慮しない</span>ので、<strong>組み合わせ</strong>です。<br />
ただし、単純に組み合わせを求めるのではなく、男子が少なくとも1人含まれるという条件を満たさなければなりません。</p>
<p>どうしたらよいでしょうか？ </p>
<p>これは、言われてみれば「ああ、そうか！」と気付くと思いますが、すべての組み合わせを求めて、そこから女子だけの組み合わせを引けばよいのです。</p>
<p>男女8人の中から3人を選ぶ組合せは、(8×7×6)／(3×2×1)＝56通りです。<br />
女子5人の中から3人を選ぶ組合せは、(5×4×3)／(3×2×1)＝10通りです。</p>
<p>したがって、男女8人の中から3人を選んだ組み合わせの中で、男子が少なくとも1人含まれているのは、56－10＝46通りであり、選択肢ウが正解です。</p>
<div class="divider mag_tp50 mag_bt30"></div>
<p>基本情報技術者試験の公開問題を見ると、過去問題（過去の試験に出題された問題）の再利用が多いことがわかります。<br />
したがって、試験に合格するために最も効率的で効果的な学習方法は、できなかった問題があれば、できるようになるまで練習することです。<br />
もしも、今回取り上げた問題がすぐにできなかったら、できるようになるまで練習してください。
</p>
<p>それでは、またお会いしましょう！</p>
<style>pre{background:#263238!important;border-radius:unset;}pre:not([class*="language-"]){font-family:'Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;color:#ccc;font-size:1em;padding:1em;}ol.background{padding-left:3em!important;}@media only screen and (max-width:600px){ol{padding-left:1em}dd{margin-left:2em}}.underline{border-bottom:1px solid;}code{padding: 0.15em 0.25em;}pre, code{background: #263238;color: #eceff1;border-radius: unset;font-size: 1em;line-height: 1.8;position: relative;}article, pre, code {
    font-family: 'consolas','Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;
}
img{width: 100%;}
article, pre, code {font-family: "Courier New","HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;}
</style><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/permutations-combinations/">場合の数（順列と組み合わせ）｜やさしい基礎理論</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>状態遷移図と状態遷移表｜やさしい基礎理論</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/statetransition/</link>
		<pubDate>Thu, 12 Sep 2024 01:30:45 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[基礎理論]]></category>
		<category><![CDATA[過去問演習]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/?post_type=kind_basic_theory&#038;p=8460</guid>
		<description><![CDATA[<p>この連載は、基本情報技術者試験の受験者を対象としたものです。 多くの受験者が苦手としている「情報の基礎理論」の分野から毎回１つずつテーマをあげて、やさしくポイント解説と問題解説を行います。 苦手分野を克服して、試験の得点 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/statetransition/">状態遷移図と状態遷移表｜やさしい基礎理論</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>
この連載は、基本情報技術者試験の受験者を対象としたものです。<br />
多くの受験者が苦手としている「情報の基礎理論」の分野から毎回１つずつテーマをあげて、やさしくポイント解説と問題解説を行います。<br />
苦手分野を克服して、試験の得点をアップしましょう。
</p>
<p>今回のテーマは、 <span class="bold">「状態遷移図」</span>と<span class="bold">「状態遷移表」</span> です。</p>
<h2>状態遷移図の記述方法</h2>
<p>
状態遷移図と状態遷移表は、<span class="u">システムがいつかの状態を持ち、外部からの入力によって状態が遷移する（他の状態に移り変わる）ことを示す図表</span>です。<br />
これらは、制御系システムの設計や、文字列の内容の検査などに使われます。
</p>
<p>
はじめに、状態遷移図の記述方法を説明しましょう。</p>
<p>状態遷移図には、いくつかの形式がありますが、ここでは、後で紹介する過去問題で使われている形式を取り上げます。<br />
状態を円で示し、円と円を結ぶ矢印の付いた線で状態の遷移の向きを示し、矢印の上に遷移のきっかけとなる入力とその際の出力を「入力/出力」という表現で書き添えます。<br />
初期状態には、大きな矢印を書き添えます。終了状態がある場合は、その状態を二重線の円で示します。</p>
<p>図1に状態遷移図の例を示します。</p>
<div class="card-panel mag_h30 c-round">
【図1】　状態遷移図の例</p>
<figure style="display:block;width:100%; max-width:600px;margin: 0 auto;">
<div class="material-placeholder"><img src="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/wp-content/uploads/2024/09/795316b92fc766b0181f6fef074f03fa.jpg" alt=""></div>
</figure>
</div>
<p>この状態遷移図には、状態0、状態1、状態2という3つの状態があり、大きな矢印を書き添えた状態0が初期状態であり、二重線の円の状態2が終了状態です。<br />
矢印の付いた線が同じ状態に向けられている場合は、その入力があっても状態が遷移しないことを意味します。</p>
<h2>状態遷移表の記述方法</h2>
<p>次に、状態遷移表の記述方法を説明しましょう。</p>
<p>状態遷移表には、特に決まった形式はないのですが、多くの場合に、表の縦方向の見出しで状態を示し、横方向の見出しで遷移のきっかけとなる入力を示し、縦と横が交差した枠の中に、どの状態に遷移するかを示します。</p>
<p>図2に状態遷移表の例を示します。</p>
<div class="card-panel mag_h30 c-round">
【図2】　状態遷移表の例</p>
<figure style="display:block;width:100%; max-width:600px;margin: 0 auto;">
<div class="material-placeholder"><img src="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/wp-content/uploads/2024/09/2b530e80c7d0de90885e285c5d798063.jpg" alt=""></div>
</figure>
</div>
<p>この状態遷移表には、状態0（初期状態）、状態1、状態2（終了状態）という3つの状態があります。</p>
<p>たとえば、状態0のときに入力aがあった場合には、それらが交差した枠の中に示された状態1に遷移します。<br />
状態0のときに入力bがあった場合は、それらが交差した枠の中が同じ状態0になっています。これは、その入力があっても状態が遷移しないことを意味します。</p>
<h2>状態遷移図に関する問題の例</h2>
<p>状態遷移図と状態遷移表に関する問題を2つ紹介しましょう。</p>
<p>はじめは、制御系システムの設計に状態遷移図を使った問題です。<br />
ここでは、300円の商品を販売する自動販売機の動作を、S<sub>0</sub>、S<sub>1</sub>、S<sub>2</sub>という3つの状態を持ち、「入力／出力」を「硬貨の入力／商品の出力」としています。</p>
<div class="card-panel mag_h30 c-round">
<p><span class="chip">問1（出典：H28秋問3）</p>
<p>300円の商品を販売する自動販売機の状態遷移図はどれか。ここで、入力と出力の関係を “入力／出力” で表し、入力の &#8220;a&#8221; は &#8220;100円硬貨&#8221; を、 &#8220;b&#8221; は &#8220;100円硬貨以外&#8221; を示し、S<sub>0</sub>～S<sub>2</sub>は状態を表す。入力が &#8220;b&#8221; の場合はすぐにその硬貨を返却する。また、終了状態に遷移する際、出力の &#8220;1&#8221; は商品の販売を、 &#8220;0&#8221; は何もしないことを示す。</p>
<figure style="display:block;width:100%; max-width:600px;margin: 0 auto;">
<div class="material-placeholder"><img src="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/wp-content/uploads/2024/09/138a6c58f28316f3edc948eea0a51128.jpg" alt=""></div>
</figure>
</div>
<p>この自動販売機では、100円以外の硬貨が入力された（bが入力された）場合には、すぐにその硬貨を返却するとしています。<br />
したがって、300円の商品を販売するには、100円硬貨の入力（aの入力）を3回行い、3回目に商品を出力して初期状態に戻ることになります。</p>
<p>そのための状態遷移図は、大きな矢印が書き添えられた初期状態（0円が入力された状態）でaが入力されたら別の状態（100円が入力された状態）に遷移し、その状態でaが入力されたら別の状態（200円が入力された状態）に遷移し、その状態でaが入力されたら（300円が入力されたら）商品を出力して初期状態に戻る、というものになるので、選択肢アが正解です。<br />
この状態遷移図では、初期状態が終了状態でもあります。</p>
<h2>状態遷移表に関する問題の例</h2>
<p>次は、文字列の内容の検査に状態遷移表を使った問題です。</p>
<p>ここでは、a（初期状態）、b、c、d、eという5つの状態があり、文字列の内容を検査するときに、たとえば「＋0010」という文字列の場合は、「＋」「0」「0」「1」「0」という文字が順番に入力されたと考えます。<br />
検査中（遷移中）に状態がeになったら不合格（不適切な内容の文字列）なので、不合格にならずにすべての入力が終われば合格（適切な内容の文字列）です。</p>
<div class="card-panel mag_h30 c-round">
<p><span class="chip">問2（出典：H26春問5）</p>
<p>表は、文字列を検査するための状態遷移表である。検査では、初期状態をaとし、文字列の検査中に状態がeになれば不合格とする。<br />
解答群で示される文字列のうち、不合格となるものはどれか。ここで文字列は左端から検査し、解答群中の△は空白を表す。</p>
<figure style="display:block;width:100%; max-width:600px;margin: 0 auto;">
<div class="material-placeholder"><img src="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/wp-content/uploads/2024/09/fb127d914c59745c3dbdfe2bb12b9883.jpg" alt=""></div>
</figure>
<p>ア　　＋0010<br />
イ　　－1　　　　<br />
ウ　　12.2　　　　<br />
エ　　9.△</p>
</div>
<p>選択肢アの「＋0010」は、状態a（初期状態）で「＋（符号）」が入力されて状態cに遷移し、状態cで「0（数字）」が入力されて状態bに遷移し、状態bで「0（数字）」が入力されて状態bに遷移し（同じ状態bのまま）、状態bで「1（数字）」が入力されて状態bに遷移し（同じ状態bのまま）、状態bで「0（数字）」が入力されて状態bに遷移し（同じ状態bのまま）、これで文字が終わりなので合格です。</p>
<p>選択肢イの「－1」は、状態a（初期状態）で「－（符号）」が入力されて状態cに遷移し、状態cで「1（数字）」が入力されて状態bに遷移し、これで文字が終わりなので合格です。</p>
<p>選択肢ウの「12.3」は、状態a（初期状態）で「1（数字）」が入力されて状態bに遷移し、状態bで「2（数字）」が入力されて状態bに遷移し（同じ状態bのまま）、状態bで「.（小数点）」が入力されて状態dに遷移し、状態dで「3（数字）」が入力されて状態eに遷移したの不合格です。</p>
<p>選択肢エの「9.△」は、状態a（初期状態）で「9（数字）」が入力されて状態bに遷移し、状態bで「.（小数点）」が入力されて状態dに遷移し、状態dで「△（空白）」が入力されて状態aに遷移し、これで文字が終わりなので合格です。</p>
<p>この問題は、不合格となる文字列を選ぶものなので、選択肢ウが正解です。</p>
<div class="divider mag_tp50 mag_bt30"></div>
<p>基本情報技術者試験の公開問題を見ると、過去問題（過去の試験に出題された問題）の再利用が多いことがわかります。<br />
したがって、試験に合格するために最も効率的で効果的な学習方法は、できなかった問題があれば、できるようになるまで練習することです。<br />
もしも、今回取り上げた問題がすぐにできなかったら、できるようになるまで練習してください。
</p>
<p>それでは、またお会いしましょう！</p>
<style>pre{background:#263238!important;border-radius:unset;}pre:not([class*="language-"]){font-family:'Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;color:#ccc;font-size:1em;padding:1em;}ol.background{padding-left:3em!important;}@media only screen and (max-width:600px){ol{padding-left:1em}dd{margin-left:2em}}.underline{border-bottom:1px solid;}code{padding: 0.15em 0.25em;}pre, code{background: #263238;color: #eceff1;border-radius: unset;font-size: 1em;line-height: 1.8;position: relative;}article, pre, code {
    font-family: 'consolas','Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;
}
img{width: 100%;}
article, pre, code {font-family: "Courier New","HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;}
</style><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/statetransition/">状態遷移図と状態遷移表｜やさしい基礎理論</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>パリティチェックとハミング符号｜やさしい基礎理論</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/paritycheck-hammingcode/</link>
		<pubDate>Fri, 23 Aug 2024 04:02:53 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[基礎理論]]></category>
		<category><![CDATA[過去問演習]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/?post_type=kind_basic_theory&#038;p=8447</guid>
		<description><![CDATA[<p>この連載は、基本情報技術者試験の受験者を対象としたものです。 多くの受験者が苦手としている「情報の基礎理論」の分野から毎回１つずつテーマをあげて、やさしくポイント解説と問題解説を行います。 苦手分野を克服して、試験の得点 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/paritycheck-hammingcode/">パリティチェックとハミング符号｜やさしい基礎理論</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>
この連載は、基本情報技術者試験の受験者を対象としたものです。<br />
多くの受験者が苦手としている「情報の基礎理論」の分野から毎回１つずつテーマをあげて、やさしくポイント解説と問題解説を行います。<br />
苦手分野を克服して、試験の得点をアップしましょう。
</p>
<p>今回のテーマは、 <span class="bold">「パリティチェック」</span>と<span class="bold">「ハミング符号」</span> です。</p>
<h2>パリティチェックの仕組み</h2>
<p>今回のテーマである「<strong>パリティチェック</strong>（parity check、偶奇検査）」と「<strong>ハミング符号</strong>（ハミングは、考案者Richard W. Hammingの名前）」は、どちらも<span class="u">データ通信におけるエラーチェック方式</span>です。</p>
<p>はじめに、パリティチェックの仕組みを説明しましょう。<br />
例として、7ビットの情報に1ビットのパリティビット（検査用ビット）を付加して、全体で8ビットのデータにして送信するとしましょう。</p>
<p>パリティチェックには、「<strong>偶数パリティ</strong>」と「<strong>奇数パリティ</strong>」があり、どちらを使うのかを、あらかじめデータの送信者と受信者が取り決めておきます。</p>
<p><strong>偶数パリティ</strong>の場合は、8ビットの中にある1の数が偶数個になるようにパリティビットを設定します。<br />
たとえば「0101010」という7ビットの情報には1が奇数個あるので、送信者はパリティビットを「<strong><span style="color: red; ">1</span></strong>」にして「0101010<strong><span style="color: red; ">1</span></strong>」という8ビットのデータを送ります。<br />
データの受信者は、受信したデータの1の数を確認し、それが偶数ならエラーがなく、奇数ならエラーがあると判断します。</p>
<p><strong>奇数パリティ</strong>の場合は、8ビットの中にある1の数が奇数個になるようにパリティビットを設定します。<br />
たとえば「0101010」という7ビットの情報には1が奇数個あるので、送信者はパリティビットを「<strong><span style="color: red; ">0</span></strong>」にして「0101010<strong><span style="color: red; ">0</span></strong>」という8ビットのデータを送ります。<br />
データの受信者は、受信したデータの1の数を確認し、それが奇数ならエラーがなく、偶数ならエラーがあると判断します。</p>
<p>パリティチェックでは、１ビットのエラーを検出できますが、複数ビットのエラーは検出できません。<br />
たとえば、偶数パリティで「0101010<strong><span style="color: red; ">1</span></strong>」というデータの2か所でエラーが生じて（0と1が反転して）「<strong><span style="color: blue; ">10</strong></span>01010<strong><span style="color: red; ">1</span></strong>」となった場合は、データの中にある1の数は偶数個なので、エラーを検出できません。<br />
また、パリティチェックは、エラーを検出できても、どの位置がエラーなのかを特定できないので、エラーの訂正はできません。</p>
<p>ここまでに説明したパリティチェックは、「<strong>垂直パリティ</strong>」と呼ばれるものです。<br />
パリティチェックの信頼性を向上させるために、「<strong>水平パリティ</strong>」が使われることもあります。<br />
水平パリティでは、データをいくつか送ったら、「BCC（Block Check Character）」という検査専用のデータを送ります。</p>
<p>たとえば、8ビットのデータを4つ送るたびにBCCを送る場合には、図１に示したように4つのデータの同じ位置（縦方向に見て同じ桁位置）でパリティビット（ここでは偶数パリティを使います）を設定した8ビットのデータがBCCです。<br />
データごとに垂直パリティをチェックし、さらにブロック（4つのデータのまとまり）ごとに水平パリティをチェックすることで、エラーを検出する精度が高まり、信頼性が向上します。</p>
<div class="card-panel mag_h30 c-round">
【図1】　垂直パリティと水平パリティの例</p>
<p>　1個目のデータ	0101010<span style="color: red; "><strong>1</strong>　・・・赤色は垂直パリティ</span><br />
　2個目のデータ	0101000<span style="color: red; "><strong>0</strong>　・・・赤色は垂直パリティ</span><br />
　3個目のデータ	0100110<span style="color: red; "><strong>1</strong>　・・・赤色は垂直パリティ</span><br />
　4個目のデータ	0100010<span style="color: red; "><strong>0</strong>　・・・赤色は垂直パリティ</span><br />
　　　　　　BCC	         	　    <span style="color: blue; "><strong>00001100</strong>　・・・青色は水平パリティ</span>
</div>
<h2>ハミング符号の仕組み</h2>
<p>次に、ハミング符号の仕組みを説明しましょう。</p>
<p>パリティチェックは、エラーの検出ができても、訂正はできませんでしたが、ハミング符号は、エラーの検出と訂正ができます。<br />
エラーの位置を特定できるからです。<br />
そのために、ハミング符号では、パリティチェックよりも多くの検査用ビットを使います。</p>
<p>例として、4ビットの情報に3ビットの検査用ビットを付加して、全体で7ビットのデータ（このデータを「ハミング符号」と呼びます）にして送信するとしましょう。<br />
x1、x2、x3、x4の4ビットに、p1、p2、p3の3ビットを付加して、[x1][x2][x3][p3][x4][p2][p1]という順序のデータにします。<br />
（※区切りがわかりやすいように[ ]で囲んでいます）<br />
この順序にする理由は、すぐ後で説明します。</p>
<p>p1、p2、p3の値は、図2に示した式で決めます。</p>
<p>たとえば、4ビットの情報が0101なら、x1＝0、x2＝1、x3＝0、x4＝1であり、p1＝0 XOR 0 XOR 1＝1、p2＝0 XOR 1 XOR 1＝0、p3＝0 XOR 1 XOR 0＝1なので、ハミング符号は[x1][x2][x3][p3][x4][p2][p1]＝0101101です。</p>
<div class="card-panel mag_h30 c-round">
【図2】　ハミング符号の検査ビットを決める式</p>
<p>　p1 ＝ x1 XOR x3 XOR x4<br />
　p2 ＝ x1 XOR x2 XOR x4<br />
　p3 ＝ x1 XOR x2 XOR x3
</p></div>
<p> [x1][x2][x3][p3][x4][p2][p1]という順序にするのは、誤りのある位置の特定を容易にするためです。</p>
<p>図3に示したように、p1、p2、p3を求める式に、1、2、4という重みを割り当てると、重みの足し算で誤りのある位置がわかります。</p>
<p>たとえば、もしも、重み1の式と重み2の式が誤りなら、それらの両方に含まれているのはx4なので、x4が誤りです。<br />
このx4の位置（最下位ビットを1ビット目とした位置）は、誤りのある式の重みを足した1＋2＝3ビット目で求められます。</p>
<div class="card-panel mag_h30 c-round">
【図3】　式に割り当てた重みで、誤りのある位置を特定できる</p>
<p>　p1 ＝ x1 XOR x3 XOR x4　・・・重み1<br />
　p2 ＝ x1 XOR x2 XOR x4　・・・重み2<br />
　p3 ＝ x1 XOR x2 XOR x3　・・・重み4</p>
<p>　 7 　  6 　  5  　 4 　  3 　  2 　  1　　・・・位置<br />
　[x1][x2][x3][p3][x4][p2][p1]</p>
<p>　・どの式にも誤りがないなら、データに誤りはない。<br />
　・重み1の式だけが誤りなら、1ビット目のp1が誤りである。<br />
　・重み2の式だけが誤りなら、2ビット目のp2が誤りである。<br />
　・重み1と重み2の式が誤りなら、1＋2＝3ビット目のx4が誤りである。<br />
　・重み4の式だけが誤りなら、4ビット目のp3が誤りである。<br />
　・重み1と重み4の式が誤りなら、1＋4＝5ビット目のx3が誤りである。<br />
　・重み2と重み4の式が誤りなら、2＋4＝6ビット目のx2が誤りである。<br />
　・重み1と重み2と重み4の式が誤りなら、1＋2＋4＝7ビット目のx1が誤りである。
</p></div>
<h2>パリティチェックとハミング符号に関する問題の例（その1）</h2>
<p>パリティチェックとハミング符号に関する問題を2つ紹介しましょう。<br />
はじめは、パリティチェック（垂直パリティ）の記述を選ぶ問題です。</p>
<div class="card-panel mag_h30 c-round">
<p><span class="chip">問1（出典：H25春問4）</p>
<p>通信回線の伝送誤りに対処するパリティチェック方式（垂直パリティ）の記述として、適切なものはどれか。</p>
<p>　ア　　1ビットの誤りを検出できる。<br />
　イ　　1ビットの誤りを訂正でき、2ビットの誤りを検出できる。<br />
　ウ　　奇数パリティならば1ビットの誤りを検出できるが、偶数パリティでは1ビットの誤りも検出できない。<br />
　エ　　奇数パリティならば奇数個のビット誤りを、偶数パリティならば偶数個のビット誤りを検出できる。
</p></div>
<p>パリティチェックは、ビットの誤りを検出できるので、選択肢アは適切です。</p>
<p>パリティビットは、誤りを検出できても訂正ができないので、選択肢イは不適切です。<br />
パリティチェックでは、偶数パリティでも基数パリティでも、１ビットの誤りを検出できることに変わりはないので、選択肢ウとエは不適切です。</p>
<p>したがって、選択肢アが正解です。</p>
<h2>パリティチェックとハミング符号に関する問題の例（その2）</h2>
<p>次は、ECCメモリで用いられているエラーチェック方式を選ぶ問題です。<br />
選択肢の中には、パリティチェックとハミング符号だけでなく、チェックサムというエラーチェック方式もあります。</p>
<div class="card-panel mag_h30 c-round">
<p><span class="chip">問2（出典：H18春問23）</p>
<p>ECCメモリで、2ビットの誤りを検出し、1ビットの誤りを訂正するために用いるものはどれか。</p>
<p>　ア　偶数パリティ　　　イ　垂直パリティ　　　ウ　チェックサム　　　エ　ハミング符号
</p></div>
<p>ECCメモリは、エラーの検出と訂正が可能なメモリです。<br />
ECCは、Error Checking and Correcting（エラーの検出と訂正）という意味です。<br />
パリティチェックは、エラーの検出ができても訂正ができませんが、ハミング符号はエラーの検出と訂正ができます。</p>
<p>したがって、選択肢エが正解です。</p>
<p>選択肢ウのチェックサムは、データをいくつか送ったら、データの合計値を検査用のデータ（これをチェックサムと呼びます）として送るというエラーチェック方式です。<br />
たとえば、12、34、56、78という4個のデータを送ったら、チェックサムとして12＋34＋56＋78＝180を送ります。<br />
チェックサムは、それまでに送ったいずれかのデータにエラーがあることを検出できますが、データの訂正はできません。</p>
<div class="divider mag_tp50 mag_bt30"></div>
<p>基本情報技術者試験の公開問題を見ると、過去問題（過去の試験に出題された問題）の再利用が多いことがわかります。<br />
したがって、試験に合格するために最も効率的で効果的な学習方法は、できなかった問題があれば、できるようになるまで練習することです。<br />
もしも、今回取り上げた問題がすぐにできなかったら、できるようになるまで練習してください。
</p>
<p>それでは、またお会いしましょう！</p>
<style>pre{background:#263238!important;border-radius:unset;}pre:not([class*="language-"]){font-family:'Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;color:#ccc;font-size:1em;padding:1em;}ol.background{padding-left:3em!important;}@media only screen and (max-width:600px){ol{padding-left:1em}dd{margin-left:2em}}.underline{border-bottom:1px solid;}code{padding: 0.15em 0.25em;}pre, code{background: #263238;color: #eceff1;border-radius: unset;font-size: 1em;line-height: 1.8;position: relative;}article, pre, code {
    font-family: 'consolas','Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;
}
img{width: 100%;}
article, pre, code {font-family: "Courier New","HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;}
</style><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/paritycheck-hammingcode/">パリティチェックとハミング符号｜やさしい基礎理論</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>逆ポーランド記法 &#124; やさしい基礎理論</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/reverse-polish-notation/</link>
		<pubDate>Wed, 10 Jul 2024 05:02:47 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[基礎理論]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/?post_type=kind_basic_theory&#038;p=8408</guid>
		<description><![CDATA[<p>この連載は、基本情報技術者試験の受験者を対象としたものです。 多くの受験者が苦手としている「情報の基礎理論」の分野から毎回1つずつテーマをあげて、やさしくポイント解説と問題解説を行います。苦手分野を克服して、試験の得点を [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/reverse-polish-notation/">逆ポーランド記法 | やさしい基礎理論</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>
この連載は、基本情報技術者試験の受験者を対象としたものです。
</p>
<p>
多くの受験者が苦手としている「情報の基礎理論」の分野から毎回1つずつテーマをあげて、やさしくポイント解説と問題解説を行います。苦手分野を克服して、試験の得点をアップしましょう。
</p>
<p>
今回のテーマは、 <span class="bold">逆ポーランド記法</span> です。
</p>
<h2>通常の計算式を逆ポーランド記法に変換する</h2>
<p>
ふだん私たちが使っている通常の計算式では、「A＋B」のように値と値の間に演算子を置きます。これを「中置記法」と呼びます。<br />
中置記法の計算式の値を求めるには、演算の優先順位を考慮したり、カッコの中を先に演算したりする必要があるので、プログラムで処理しにくいものです。</p>
<p>たとえば、A＋B×(CーD)という計算式をプログラムで処理するとしましょう。</p>
<p>先頭から1文字ずつ取り出していくと、Aの次に＋がありますが、それより先にある×の優先順位が高いので、すぐには＋の演算ができません。<br />
さらに、×より先にカッコで囲まれた部分があるので、そこを先に演算しなければなりません。<br />
これをプログラムで実現するのは、かなり困難でしょう。</p>
<p>今回のテーマである「<span class="bold">逆ポーランド記法</span>」は、プログラムで処理しやすいものです。<br />
「AB＋」のように、値と値の後に演算子を置きます。<br />
逆ポーランド記法という名称は、ポーランドの論理学者によって考案されたことに由来します。<br />
演算子が後にあるので「後置記法」とも呼ばれます。</p>
<p>先ほどのA＋B×(CーD)という計算式を逆ポーランド記法にすると、ABCD－×＋になります。<br />
逆ポーランド記法では、演算を優先するカッコが不要になり、後で説明しますが、スタックを使った手順で計算式の値を容易に求められます。</p>
<p>以下の4つの例で、通常の計算式を逆ポーランド記法にする練習をしましょう。</p>
<p>ポイントは、以下の3点です。<br />
・<span class="u">「値」「演算子」「値」という表現を「値」「値」「演算子」にすること</span><br />
・<span class="u">「値」「値」「演算子」の部分が演算結果の「値」になること</span><br />
・<span class="u">「値」「値」「演算子」の部分の演算が必ず行われるのでカッコで囲む必要がないこと</span></p>
<div class="card-panel mag_h30 c-round">
【練習】</p>
<p>例1　：　A＋B<br />
例2　：　A＋B×C<br />
例3　：　(A＋B)×(C－D)<br />
例4　：　X＝A＋B－C</p>
</div>
<p>例1は、「AとBを足す」なので、<span class="bold">AB＋</span>になります。<br />
「値」「演算子」「値」という表現を「値」「値」「演算子」にすることがポイントです。</p>
<p>例2は、「Aに、BとCを掛けた値を、足す」なので、<span class="bold">ABC×＋</span>になります。<br />
BC×の部分が演算結果の「値」になることがポイントです。</p>
<p>例3は、「AとBを足した値に、CからDを引いた値を、掛ける」なので、<span class="bold">AB＋CDー×</span>になります。<br />
AB＋とCD－の部分が演算結果の「値」になることと、それぞれの演算が必ず行われるのでカッコで囲む必要がないことがポイントです。</p>
<p>例4は、「Xに、AとBを足した値から、Cを引いた値を、代入する」なので、<span class="bold">XAB＋C－＝</span>になります。<br />
変数への代入も演算とみなします。</p>
<h2>スタックを使って逆ポーランド記法の計算式の値を得る</h2>
<p>
以下に、逆ポーランド記法の計算式の値を得る手順を説明します。</p>
<p>スタックは、データを積み上げる形式で格納するバッファ（データを一時的に格納する配列）であり、最後に格納したデータが最初に取り出されます。<br />
スタックにデータを格納することを「プッシュする」、スタックからデータを取り出すことを「ポップする」といいます。</p>
<div class="card-panel mag_h30 c-round">
【逆ポーランド記法の計算式の値を得る手順】</p>
<p>（1） 逆ポーランド記法の計算式の先頭から順に1文字ずつ取り出す。</p>
<p>（2） 取り出した文字が値（変数や数値）ならスタックにプッシュする。</p>
<p>（3） 取り出した文字が演算子ならスタックから2つのデータをポップし、両者の演算結果の値をスタックにプッシュする。</p>
<p>（4） （1）に戻って繰り返し、最後の文字を取り出して処理したら、その時点でスタックに残っている1つの値が計算式の値である。
</p></div>
<p>どうして、この手順で逆ポーランド記法の計算式の値が得られるかわかりますか。</p>
<p>逆ポーランド記法の計算式は、「値」「値」「演算子」となっているので、値ならすぐに処理せずにスタックにプッシュし、演算子ならその前に2つの値がスタックにプッシュされているので、それらを取り出して演算を行い、演算結果が値となるのでスタックにプッシュします。<br />
これを計算式の最後の文字まで繰り返すと、スタックに1つの値が残り、それが計算式の値になるのです。</p>
<h2>逆ポーランド記法に関する問題の例（その1）</h2>
<p>逆ポーランド記法に関する問題を2つ紹介しましょう。<br />
はじめは、通常の計算式を逆ポーランド記法にする問題です。</p>
<div class="card-panel mag_h30 c-round">
<p><span class="chip">問1（出典：H24春問4）</p>
<p>後置記法(逆ポーランド記法)では、例えば、式 Y＝(A－B)×C を YAB－C×＝ と表現する。<br />
次の式を後置記法で表現したものはどれか。</p>
<p>Y＝(A＋B)×(C－D÷E)</p>
<p>ア　YAB＋C－DE÷×＝<br />
イ　YAB＋CDE÷－×＝<br />
ウ　YAB＋EDC÷－×＝<br />
エ　YBA＋CD－E÷×＝</p>
</div>
<p>Y＝(A＋B)×(C－D÷E)は、以下のように考えます。</p>
<p class="grey lighten-5 c-round" style="padding: 1em;">
　「Yに」「AとBを足した値と」「CからDをEで割った値を引いた値を」「掛けた値を」「代入する」<br />
　↓<br />
　Y「AとBを足した値と」「CからDをEで割った値を引いた値を」「掛けた値を」＝<br />
　↓<br />
　Y「AB＋」「CからDE÷を引いた値を」「掛けた値を」＝<br />
　↓<br />
　Y「AB＋」「CDE÷－」「×」＝<br />
　↓<br />
　YAB＋CDE÷－×＝
</p>
<p>したがって、YAB＋CDE÷－×＝という逆ポーランド記法になり、選択肢イが正解です。</p>
<h2>逆ポーランド記法に関する問題の例（その2）</h2>
<p>次は、スタックを使って逆ポーランド記法の計算式の値を得る手順の問題です。</p>
<p>この問題では、計算式の値を得るのではなく、計算式の値を得るのに必要とされるスタックの最大の深さ（スタックに格納される最大の要素数）を求めます。<br />
問題に示された例を真似して、スタックの絵を書いてみましょう。</p>
<div class="card-panel mag_h30 c-round">
<p><span class="chip">問1（出典：H25春問6）</p>
<p>図は，逆ポーランド表記法で書かれた式 abcd+++ をスタックで処理するときのスタックの変化の一部を表している。<br />
この場合，スタックの深さは最大で 4 となる。 最大のスタックの深さが最も少ない逆ポーランド表記法の式はどれか。</p>
<figure style="display:block;width:100%; max-width:600px;margin: 0 auto;">
<div class="material-placeholder"><img src="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/wp-content/uploads/2024/07/8285a9b269f15fd1ef7bac88cbcddd63.jpg" alt=""></div>
</figure>
<p>ア　ab+c+d+　　　イ　ab+cd++　　　ウ　abc++d+　　　エ　abc+d++</p>
</div>
<p>
選択肢アのab＋c＋d＋という計算式の値は、以下の手順で得られます。<br />
スタックの最大の深さは、2です。</p>
<figure style="display:block;width:100%; max-width:500px;margin: 0 auto;">
<div class="material-placeholder"><img src="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/wp-content/uploads/2024/07/964eda9e3e421fe493ac7456ae814c22.jpg" alt=""></div>
</figure>
<p>
選択肢イのab＋cd＋＋という計算式の値は、以下の手順で得られます。<br />
スタックの最大の深さは、3です。</p>
<figure style="display:block;width:100%; max-width:500px;margin: 0 auto;">
<div class="material-placeholder"><img src="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/wp-content/uploads/2024/07/10b5020238fc35de96c2e1eff7f8aa5b.jpg" alt=""></div>
</figure>
<p>
選択肢ウのabc＋＋d＋という計算式の値は、以下の手順で得られます。<br />
スタックの最大の深さは、3です。</p>
<figure style="display:block;width:100%; max-width:500px;margin: 0 auto;">
<div class="material-placeholder"><img src="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/wp-content/uploads/2024/07/fefa3a7a1529b25ee1bc9f548674785c.jpg" alt=""></div>
</figure>
<p>
選択肢エのabc＋d＋＋という計算式の値は、以下の手順で得られます。<br />
スタックの最大の深さは、3です。</p>
<figure style="display:block;width:100%; max-width:600px;margin: 0 auto;">
<div class="material-placeholder"><img src="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/wp-content/uploads/2024/07/1a392598821c671e66aa519339b15581.jpg" alt=""></div>
</figure>
<p>スタックの最大の深さが最も少ないのは、選択肢アの2です。<br />
したがって、選択肢アが正解です。</p>
<div class="divider mag_tp50 mag_bt30"></div>
<p>
基本情報技術者試験の公開問題を見ると、過去に出題された問題の再利用が多いことがわかります。<br />
したがって、試験に合格するために最も効率的で効果的な学習方法は、過去問題を数多く解き、できなかった問題があれば、できるようになるまで練習することです。<br />
もしも、今回取り上げた問題がすぐにできなかったら、できるようになるまで練習してください。
</p>
<p>
それでは、またお会いしましょう！
</p>
<style>pre{background:#263238!important;border-radius:unset;}pre:not([class*="language-"]){font-family:'Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;color:#ccc;font-size:1em;padding:1em;}ol.background{padding-left:3em!important;}@media only screen and (max-width:600px){ol{padding-left:1em}dd{margin-left:2em}}.underline{border-bottom:1px solid;}code{padding: 0.15em 0.25em;}pre, code{background: #263238;color: #eceff1;border-radius: unset;font-size: 1em;line-height: 1.8;position: relative;}article, pre, code {
    font-family: 'consolas','Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;
}
img{width: 100%;}
article, pre, code {font-family: "Courier New","HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;}
</style><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/reverse-polish-notation/">逆ポーランド記法 | やさしい基礎理論</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>浮動小数点数 &#124; やさしい基礎理論</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/floating-point/</link>
		<pubDate>Thu, 20 Jun 2024 09:00:31 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[基礎理論]]></category>
		<category><![CDATA[科目 A]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/?post_type=kind_basic_theory&#038;p=8388</guid>
		<description><![CDATA[<p>この連載は、基本情報技術者試験の受験者を対象としたものです。 多くの受験者が苦手としている「情報の基礎理論」の分野から毎回1つずつテーマをあげて、やさしくポイント解説と問題解説を行います。苦手分野を克服して、試験の得点を [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/floating-point/">浮動小数点数 | やさしい基礎理論</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>
この連載は、基本情報技術者試験の受験者を対象としたものです。
</p>
<p>
多くの受験者が苦手としている「情報の基礎理論」の分野から毎回1つずつテーマをあげて、やさしくポイント解説と問題解説を行います。苦手分野を克服して、試験の得点をアップしましょう。
</p>
<p>
今回のテーマは、 <span class="bold">浮動小数点数</span> です。
</p>
<h2>符号部、仮数部、指数部</h2>
<p>コンピュータの内部では、電圧の高低を1と0に割り当てた2進数で、あらゆるデータを表しています。<br />
1と0だけなので、そのままでは小数点数（小数点がある数）を表せません。<br />
そこで、小数点数を表すときは、データの表現を工夫しています。<br />
よく使われる工夫として、今回のテーマである「<strong>浮動小数点数</strong>」があります。</p>
<p>浮動小数点数は、1つの小数点数を「符号部」「仮数部」「指数部」という3つの整数の情報で表すものです。<br />
どれも整数なので、1と0だけで表せます。</p>
<p>例として、－101.011という2進数の小数点数を3つの整数で表してみましょう。</p>
<p>整数部が0で小数点以下1桁目が1になるように桁をずらしてください。<br />
－101.011＝－0.101011×2<sup>3</sup>になります。</p>
<p>－0.101011×2<sup>3</sup>において、－が符号部、小数点以下の101011が仮数部、2<sup>3</sup>の3が指数部です。<br />
符号部は、プラスを0とし、マイナスを1とすれば、1と0だけの整数です。<br />
指数部の3は、2進数で表すと11なので、これも1と0だけの整数です。<br />
仮数部の101011は、これも1と0だけの整数です。<br />
この形式にするために、－101.011の小数点の位置をずらしたのです。<br />
浮動小数点数の「浮動」は、小数点の位置をずらすことを意味しています。</p>
<p>－101.011という小数点数を、符号部0、仮数部101011、指数部11という3つの整数の情報で表せました。<br />
符号部、仮数部、指数部を、それぞれ何ビットで表し、どのような順に並べるかを取り決めれば、1つの浮動小数点数になります。<br />
例えば、符号部1ビット、仮数部11ビット、指数部4ビットで、符号部、指数部、仮数部の順に並べて、全体で16ビットのデータにするなら、[0][0011][10101100000]という浮動小数点数になります。<br />
ここでは、わかりやすいように [ ] で区切っていますが、実際には、0001110101100000という1つのデータです。</p>
<h2>正規化の方法</h2>
<p>小数点の位置をずらして－101.011を－0.101011×2<sup>3</sup>にという形式にすることを「<strong>正規化</strong>」と呼びます。<br />
正規化とは、「データの表現を整える」という意味です。<br />
なぜ、わざわざこんな難しい言葉を説明するのかというと、後で示す問題で使われているからです。</p>
<p>浮動小数点数の正規化には、2つの方法があります。<br />
1つは、これまで示してきたように、整数部が0で小数点以下1桁目が1になるように桁をずらして、小数点以下を仮数部とする方法です。<br />
－101.011なら－0.101011×2<sup>3</sup>として101011を仮数部とします。<br />
もう1つは、整数部が1になるように桁をずらして、小数点以下を仮数部とする方法です。<br />
－101.011なら－1.01011×2<sup>2</sup>として01011を仮数部とします。<br />
どちらの方法も、小数点以下を仮数部とするので、仮数部は1と0だけの整数になります。</p>
<h2>符号部のマイナスを表す方法</h2>
<p>0.0001011という小数点数を浮動小数点数にすると、0.0001011＝0.1011×2<sup>－3</sup>なので、符号部がマイナスになります。<br />
符号部のマイナスを表すには、「2の補数表現」および「イクセス表現」という方法があります。<br />
2の補数表現は、<a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/basic-theory2/" rel="noopener" target="_blank"><u>この連載の第2回</u></a>で説明したので、ここではイクセス表現を説明しましょう。</p>
<p>イクセス（excess）とは、直訳すると「過剰」という意味ですが、イクセス表現を「げたばき表現」と呼ぶことがあります。「げたばき」とは、学校でテストの得点が低いときに全員に加点することを「下駄を履かせる」といいますが、それと同じ意味です。</p>
<p>イクセス表現の仕組みは、トランプを例にして考えると、わかりやすいでしょう。</p>
<p>Aを1、Jを11、Qを12、Kを13とすれば、トランプで表せる数は、1～13のプラスの数だけです。<br />
ここで、真ん中の数の7をゼロとみなしたら、どうなるでしょう。<br />
7より1小さい6は－1であり、7より2小さい5は－2であるとみなせます。<br />
逆に、7より1大きい8は1であり、7より2大きい9は2であるとみなせます。<br />
これによって、トランプで－6～6の数を表せます。これが、イクセス表現の仕組みです。<br />
ここでは、7という下駄を履かせています。</p>
<p>たとえば、符号部が4ビットの場合は、表せる数が0000～1111（10進数で0～15）なので、その真ん中の0111をゼロとみなせば、表1に示したように10進数の－7～8を表せます。</p>
<p>真ん中は、表せる数の最小値と最大値を足して2で割って求められます（小数点以下はカットします）。<br />
ここでは、0000＋1111＝1111を2で割ります。<br />
2進数は、1ビット右シフトすると2で割った値になるので、1111を2で割った値は0111です。<br />
最下位桁から右にはみ出した1が消えるので、小数点以下をカットした値になります。</p>
<div class="card-panel mag_h30">
※（10/17更新）表1の内容に誤りがあったため正しい内容に更新しております。大変申し訳ございません。※
</div>
<p><!DOCTYPE html><br />
<html lang="ja"><br />
<head><br />
  <meta charset="utf-8"><br />
  <title>【表1】イクセス表現の0000～1111で表せる数</title></p>
<style>
    body {
      margin: 20px;
      font-family: Arial, sans-serif;
      background-color: #fff;
    }
    .wrapper {
      max-width: 600px;
      margin: 0 auto; /* 横方向中央寄せ */
      text-align: center;
    }
    .title {
      /* h2 相当の見た目 */
      font-size: 1.5em;
      font-weight: bold;
      margin-bottom: 8px;
    }
    table {
      border-collapse: collapse;
      width: 320px;
      margin: 0 auto; /* テーブル自体も中央寄せ */
    }
    th, td {
      border: 1px solid #333;
      padding: 6px 10px;
      text-align: center;
      white-space: nowrap;
    }
    thead th {
      background-color: #f0f0f0;
    }
  </style>
<p></head><br />
<body></p>
<div class="wrapper">
<div class="title">【表1】イクセス表現の0000～1111で表せる数</div>
<table>
<thead>
<tr>
<th>イクセス表現（2進数）</th>
<th>10進数</th>
</tr>
</thead>
<tbody>
<tr>
<td>0000</td>
<td>−7</td>
</tr>
<tr>
<td>0001</td>
<td>−6</td>
</tr>
<tr>
<td>0010</td>
<td>−5</td>
</tr>
<tr>
<td>0011</td>
<td>−4</td>
</tr>
<tr>
<td>0100</td>
<td>−3</td>
</tr>
<tr>
<td>0101</td>
<td>−2</td>
</tr>
<tr>
<td>0110</td>
<td>−1</td>
</tr>
<tr>
<td>0111</td>
<td>0</td>
</tr>
<tr>
<td>1000</td>
<td>1</td>
</tr>
<tr>
<td>1001</td>
<td>2</td>
</tr>
<tr>
<td>1010</td>
<td>3</td>
</tr>
<tr>
<td>1011</td>
<td>4</td>
</tr>
<tr>
<td>1100</td>
<td>5</td>
</tr>
<tr>
<td>1101</td>
<td>6</td>
</tr>
<tr>
<td>1110</td>
<td>7</td>
</tr>
<tr>
<td>1111</td>
<td>8</td>
</tr>
</tbody>
</table></div>
<p></body><br />
</html></p>
<h2>浮動小数点数に関する問題の例（その1）</h2>
<p>浮動小数点数に関する問題を2つ紹介しましょう。<br />
はじめは、符号部、仮数部、指数部に関する問題です。
</p>
<div class="card-panel mag_h30">
<p><span class="chip">問題の例その1（出典：H21秋問2）</p>
<figure style="display:block;width:600px;margin: 0 auto;">
<div class="material-placeholder"><img src="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/wp-content/uploads/2024/06/ae24f8496793ebda10f3490a38ab6d20.jpg" alt=""></div>
</figure>
<p>     ア：fを仮数、eを指数、rを基数という<br />
     イ：fを基数、eを仮数、rを指数という<br />
     ウ：fを基数、eを指数、rを仮数という<br />
     エ：fを指数、eを基数、rを仮数という
</p></div>
<p>
これまでに示した－101.011＝－0.101011×2<sup>3</sup>という例に当てはめてみましょう。<br />
101011に該当するfは仮数部です。3に該当するeは指数部です。<br />
この問題でには符号部がありませんが、その代わりに2に該当するrという基数（重み付の基準の数）があります。<br />
したがって、選択肢アが正解です。</p>
<p>2進数の基数は2に決まっているので、浮動小数点数に基数部という情報はありませんが、この問題では、符号部をアルファベットで示せなかったので、基数を取り上げたのでしょう。</p>
<h2>浮動小数点数に関する問題の例（その2）</h2>
<p>次は、10進数の小数点数を、決められたビット数の浮動小数点数に置き換える問題です。<br />
ここでは、符号部をイクセス表現ではなく、2の補数表現で表します。<br />
「仮数部の最上位桁が0にならないように指数部と仮数部を調整する」とは、整数部が0で小数点以下1桁目が1になるように桁をずらすということです。
</p>
<div class="card-panel mag_h30">
<p><span class="chip">問題の例その2（出典：H18春問4）</p>
<p>数値を図に示す16ビットの浮動小数点形式で表すとき、10進数0.25を正規化した表現はどれか。<br />
ここでの正規化は、仮数部の最上位けたが0にならないように指数部と仮数部を調整する操作とする。</p>
<figure style="display:block;width:100%; max-width:600px;margin: 0 auto;">
<div class="material-placeholder"><img src="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/wp-content/uploads/2024/06/9b30bed9421480a3a7ec1db511405ab0.jpg" alt=""></div>
</figure>
<figure style="display:block;width:100%; max-width:600px;margin: 0 auto;">
<div class="material-placeholder"><img src="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/wp-content/uploads/2024/06/4301d7262449b825c3ee629387a6935d.jpg" alt=""></div>
</figure>
</div>
<p>
0.25を2進数に変換すると0.01です。<br />
0.01＝0.1×2<sup>-1</sup>なので、符号部が0（プラス）、仮数部が1、指数部が－1です。<br />
それぞれを1ビット、11ビット、4ビットで表すので、指数部は0、仮数部は10000000000、指数部は1111です。<br />
これらを符号部、指数部、仮数部の順に並べるので、浮動小数点数は[0][1111][10000000000]です。<br />
したがって、選択肢ウが正解です。</p>
<p>2の補数表現では「プラスの数を反転して1を足す」とマイナスの数になります。<br />
1を4ビットの2進数で表すと0001です。0001を反転すると1110です。1110に1を足すと1111です。<br />
したがって、－1を4ビットの2の補数表現で表すと1111になります。</p>
<div class="divider mag_tp50 mag_bt30"></div>
<p>
基本情報技術者試験の公開問題を見ると、過去に出題された問題の再利用が多いことがわかります。<br />
したがって、試験に合格するために最も効率的で効果的な学習方法は、過去問題を数多く解き、できなかった問題があれば、できるようになるまで練習することです。<br />
もしも、今回取り上げた問題がすぐにできなかったら、できるようになるまで練習してください。
</p>
<p>
それでは、またお会いしましょう！
</p>
<style>pre{background:#263238!important;border-radius:unset;}pre:not([class*="language-"]){font-family:'Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;color:#ccc;font-size:1em;padding:1em;}ol.background{padding-left:3em!important;}@media only screen and (max-width:600px){ol{padding-left:1em}dd{margin-left:2em}}.underline{border-bottom:1px solid;}code{padding: 0.15em 0.25em;}pre, code{background: #263238;color: #eceff1;border-radius: unset;font-size: 1em;line-height: 1.8;position: relative;}article, pre, code {
    font-family: 'consolas','Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;
}
img{width: 100%;}
article, pre, code {font-family: "Courier New","HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;}
</style><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/floating-point/">浮動小数点数 | やさしい基礎理論</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>ビット演算 &#124; やさしい基礎理論</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/bitwise-operation/</link>
		<pubDate>Tue, 28 May 2024 02:00:14 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[2進数]]></category>
		<category><![CDATA[基礎理論]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/?post_type=kind_basic_theory&#038;p=8360</guid>
		<description><![CDATA[<p>この連載は、基本情報技術者試験の受験者を対象としたものです。 多くの受験者が苦手としている「情報の基礎理論」の分野から毎回1つずつテーマをあげて、やさしくポイント解説と問題解説を行います。苦手分野を克服して、試験の得点を [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/bitwise-operation/">ビット演算 | やさしい基礎理論</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>
この連載は、基本情報技術者試験の受験者を対象としたものです。
</p>
<p>
多くの受験者が苦手としている「情報の基礎理論」の分野から毎回1つずつテーマをあげて、やさしくポイント解説と問題解説を行います。苦手分野を克服して、試験の得点をアップしましょう。
</p>
<p>
今回のテーマは、 <span class="bold">ビット演算</span> です。
</p>
<h2>ビット単位の論理演算</h2>
<p>ビット演算は、データを2進数で表して演算するものです。<br />
ビット演算には、「ビット単位の論理演算」と「ビット単位のシフト演算」があります。<br />
ビットは、「2進数の桁」という意味です。ビット単位の論理演算は、2つの2進数のデータで桁ごとに論理演算を行います。<br />
ビット単位のシフト演算は、2進数のデータを指定した桁数だけずらします。</p>
<p>図1に、ビット単位の論理演算の例を示します。<br />
ビット単位の論理演算は、特定の桁だけを覆い隠す（マスクする）ように変化させる演算なので、「マスク演算」とも呼ばれます。<br />
ここでは、マスクされるデータを「データ」、特定の桁を指定するデータを「マスク」で示しています。
</p>
<div class="card-panel mag_h30 c-round">
【図1】　ビット単位の論理演算の例</p>
<p>（1）<strong>AND演算</strong><br />
    　 　　<span style="color: orange; ">01010101</span> データ<br />
AND <span style="color: blue; ">0000</span><span style="color: green; ">1111</span> マスク<br />
―――――――――――――<br />
    　 　　<span style="color: blue; ">0000</span><span style="color: orange; ">0101</span> 演算結果<br />
※<span style="color: blue; ">マスクで0</span>になっている桁が<span style="color: blue; ">0になり</span>、<span style="color: green; ">マスクで1</span>になっている桁は<span style="color: orange; ">変化しない</span>。</p>
<p>（2）<strong>OR演算</strong><br />
    　 　　<span style="color: orange; ">01010101</span> データ<br />
OR  　<span style="color: green; ">0000</span><span style="color: blue; ">1111</span> マスク<br />
―――――――――――――<br />
    　 　　<span style="color: orange; ">0101</span><span style="color: blue; ">1111</span> 演算結果<br />
※<span style="color: green; ">マスクで0</span>になっている桁は<span style="color: orange; ">変化せず</span>、<span style="color: blue; ">マスクで1</span>になっている桁が<span style="color: blue; ">1になる</span>。</p>
<p>（3）<strong>XOR演算</strong><br />
    　 　　<span style="color: orange; ">01010101</span> データ<br />
XOR <span style="color: green; ">0000</span><span style="color: blue; ">1111</span> マスク<br />
―――――――――――――<br />
    　 　　<span style="color: orange; ">0101</span><span style="color: blue; ">1010</span> 演算結果<br />
※<span style="color: green; ">マスクで0</span>になっている桁は<span style="color: orange; ">変化せず</span>、<span style="color: blue; ">マスクで1</span>になっている桁が<span style="color: blue; ">反転する</span>。
</div>
<p>
ビット単位のAND演算の結果は以下の通りです。</p>
<p class="grey lighten-5 c-round" style="padding: 1em;">
<strong>0 AND 0 ＝ 0、0 AND 1 ＝ 0、1 AND 0 ＝ 0、1 AND 1 ＝ 1</strong>
</p>
<p>したがって、マスクで0になっている桁が0になり、マスクで1になっている桁は変化しません。<br />
ここでは、マスクが00001111なので、データの上位4桁がすべて0になり、下位4桁は変化しません。<br />
このように、ビット単位のAND演算は、データの特定の桁だけをすべて0にして、残りの桁を変化させない場合に使われます。
</p>
<p>&nbsp;</p>
<p>
ビット単位のOR演算の結果は以下の通りです。</p>
<p class="grey lighten-5 c-round" style="padding: 1em;">
<strong>0 OR 0 ＝ 0、0 OR 1 ＝ 1、1 OR 0 ＝ 1、1 OR 1 ＝ 1</strong>
</p>
<p>したがって、マスクで0になっている桁は変化せず、マスクで1になっている桁が1になります。<br />
ここでは、マスクが00001111なので、データの上位4桁は変化せず、下位4桁がすべて1になります。<br />
このように、ビット単位のOR演算は、データの特定の桁だけをすべて１にして、残りの桁を変化させない場合に使われます。
</p>
<p>&nbsp;</p>
<p>
ビット単位のXOR演算の結果は以下の通りです。</p>
<p class="grey lighten-5 c-round" style="padding: 1em;">
<strong>0 XOR 0 ＝ 0、0 XOR 1 ＝ 1、1 XOR 0 ＝ 1、1 XOR 1 ＝ 0</strong>
</p>
<p>したがって、マスクで0になっている桁は変化せず、マスクで1になっている桁が反転（0が1になり、1が0になること）します。<br />
ここでは、マスクが00001111なので、データの上位4桁は変化せず、下位4桁が反転します。<br />
このように、ビット単位のXOR演算は、データの特定の桁だけを反転して、残りの桁を変化させない場合に使われます。
</p>
<p><h2>ビット単位のシフト演算</h2>
<p>
ビット単位のシフト演算は、2進数のデータを指定した桁数だけずらします。</p>
<p>上位桁（左方向）にずらすことを「左シフト」と呼び、下位桁（右方向）にずらすことを「右シフト」と呼びます。<br />
それぞれに「論理シフト」と「算術シフト」があり、「論理左シフト」「論理右シフト」および「算術左シフト」「算術右シフト」と呼びます。
</p>
<p>
シフトは、レジスタを使って行われます。<br />
レジスタは、コンピュータの演算制御装置であるCPUの内部にあるデータ格納領域です。<br />
CPUの種類によってレジスタのサイズは、決まっています。<br />
たとえば、レジスタのサイズが8ビットなら、左シフトで上位桁からはみ出した数値は失われ、右シフトで下位桁からはみ出した数値は失われます。<br />
左シフトでは下位桁に空きができ、右シフトでは上位桁に空きができますが、ここに何を入れるかが、論理シフトと算術シフトで異なります。</p>
<p>
論理シフトでは、左シフトで空いた下位桁には0を入れ、右シフトで空いた上位桁にも0を入れます。</p>
<p>図2に論理シフトの例を示します。<br />
論理シフトは、単に桁をずらすために使われます。ここでは、シフト前とシフト後のデータを示しています。<br />
レジスタのサイズは、8ビットだとします。
</p>
<p><div class="card-panel mag_h30 c-round">
【図2】　論理シフトの例</p>
<p>（1）<strong>1ビットの論理左シフト</strong><br />
<span style="color: orange; ">00111100</span> シフト前<br />
<span style="color: orange; ">0111100</span><span style="color: blue; ">0</span> シフト後<br />
※左シフトで空いた<span style="color: blue; ">下位桁には0</span>を入れる。</p>
<p>（2）<strong>1ビットの論理右シフト</strong><br />
<span style="color: orange; ">00111100</span> シフト前<br />
<span style="color: blue; ">0</span><span style="color: orange; ">0011110</span> シフト後<br />
※右シフトで空いた<span style="color: blue; ">上位桁には0</span>を入れる。
</div>
<p>
算術シフトは、左シフトで乗算を実現し、右シフトで除算を実現します。<br />
2進数は、左に1桁シフトするごとに値が2倍になり、右に1桁シフトするごとに値が1/2になります。<br />
これらで、2を掛ける乗算と2で割る除算を実現するのです。<br />
その際に、2の補数表現（<a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/basic-theory2/" rel="noopener" target="_blank"><u>この連載の第2回</u></a>で説明しています）を使ったマイナスの値でも、正しい乗算と除算の結果が得られるように、最上位桁の符号ビットをシフトの対象とせずに、左シフトで空いた下位桁には0を入れますが（これは論理シフトと同じです）、右シフトで空いた上位桁には符号ビットと同じ値（プラスの値なら0、マイナスの値なら1）を入れます。</p>
<p>こうすると、マイナスの値でも、正しい乗算と除算の結果が得られるのです。
</p>
<p>
図3に算術シフトの例を示します。<br />
ここでも、シフト前とシフト後のデータを示しています。レジスタのサイズは、8ビットだとします。
</p>
<div class="card-panel mag_h30 c-round">
【図3】　算術シフトの例</p>
<p>（1）<strong>1ビットの算術左シフト（2を掛ける乗算）</strong><br />
<span style="color: green; ">1</span><span style="color: orange; ">1111100</span> シフト前（10進数でマイナス4）<br />
<span style="color: green; ">1</span><span style="color: orange; ">111100</span><span style="color: blue; ">0</span> シフト後（10進数でマイナス8）<br />
※<span style="color: green; ">符号ビット</span>をシフトの対象とせず、左シフトで空いた<span style="color: blue; ">下位桁には0</span>を入れる。</p>
<p>（2）<strong>1ビットの算術右シフト（2で割る除算）</strong><br />
<span style="color: green; ">1</span><span style="color: orange; ">1111100</span> シフト前（10進数でマイナス4）<br />
<span style="color: green; ">1</span><span style="color: blue; ">1</span><span style="color: orange; ">111110</span> シフト後（10進数でマイナス2）<br />
※<span style="color: green; ">符号ビット</span>をシフトの対象とせず、右シフトで空いた<span style="color: blue; ">上位桁には符号ビットと同じ値（ここでは1）</span>を入れる。
</div>
<h2>ビット演算に関する問題の例（その1）</h2>
<p>
ビット演算に関する問題を2つ紹介しましょう。<br />
はじめは、ビット単位の論理演算の問題です。
</p>
<div class="card-panel mag_h30 c-round">
<p><span class="chip">問1（出典：H28秋問1）</p>
<p>8ビットのビット列の下位4ビットが変化しない操作はどれか。</p>
<p>ア　16進表記 0F のビット列との排他的論理和をとる。<br />
イ　16進表記 0F のビット列との否定論理積をとる。<br />
ウ　16進表記 0F のビット列との論理積をとる。<br />
エ　16進表記 0F のビット列との論理和をとる。
</p></div>
<p>
問題では、0Fという16進数が使われています。<br />
ビット演算は、データを2進数で表して演算するものなので、16進数の0Fを2進数に変換しましょう。</p>
<p>16進数は、16で桁上がりするので、1桁を0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、Fで表します。<br />
A～Fは、10進数なら10～15です。16進数の1桁は、2進数の4桁になります。<br />
2進数の4桁の重みは、上位桁から順に8、4、2、1なので、これらをどのように足し合わせれば16進数の1桁になるかを考えて変換します。</p>
<p>0は、8、4、2、1のどれも足さないので、すべての桁が0の0000です。<br />
Fは10進数で15であり、15＝8＋4＋2＋1なので、すべての桁が1の1111です。</p>
<p>したがって、16進数の0Fは、2進数で00001111です。</p>
<p>この00001111をマスクとして、選択肢に示されたどの演算を行うと、下位4ビットが変化しないかを答えます。<br />
選択にある排他的論理和、否定論理積、論理積、論理和は、XOR、NAND（NOT ANDという意味で、AND演算の結果をNOT演算します）、AND、ORの日本語名です。</p>
<p>00001111は、下位4ビットがすべて1です。<br />
XOR演算では、1に対応する桁が反転します。<br />
NAND演算では、AND演算で1に対応する桁が変化し、さらにNOT演算（すべての桁を反転する演算）するので、下位4ビットを含むすべての桁が反転します。<br />
AND演算では、1に対応する桁が変化しません。<br />
OR演算では、1に対応する桁がすべて1になります。</p>
<p>したがって、下位4ビットが変化しないのは、AND演算（論理積）であり、選択肢ウが正解です。
</p>
<h2>ビット演算に関する問題の例（その2）</h2>
<p>
次は、ビット単位のシフト演算の問題です。
</p>
<div class="card-panel mag_h30 c-round">
<p><span class="chip">問2（出典：H25秋問2）</p>
<p>32ビットのレジスタに16進数ABCDが入っているとき，2ビットだけ右に論理シフトしたときの値はどれか。</p>
<p>ア　2AF3　　　<br />
イ　6AF3　　　<br />
ウ　AF34　　　<br />
エ　EAF3
</p></div>
<p>
ここでもABCDという16進数が使われているので、2進数に変換してから、シフト演算しましょう。</p>
<p>A、B、C、Dは、10進数で10、11、12、13です。<br />
10＝8＋0＋2＋0なので、1010です。<br />
11＝8＋0＋2＋1なので、1011です。<br />
12＝8＋4＋0＋0なので、1100です。<br />
13は、8＋4＋0＋1なので、1101です。</p>
<p>したがって、16進数のABCDは、2進数で1010101111001101です。</p>
<p>ここでは、32ビットのレジスタなので、32桁の2進数を保持でき、左シフトで上位桁からはみ出した数値と、右シフトで下位桁からはみ出した数値は消えてなくなります。<br />
1010101111001101という32ビットのデータを2ビットシフトすると、下位2桁の01がはみ出し、空いた上位2桁に<span style="color: blue; ">00</span>が入って、<span style="color: blue; ">00</span>10101011110011になります。</p>
<p>選択肢が16進数になっているので、0010101011110011を16進数にしましょう。</p>
<p>2進数を下位桁から4ビットずつに区切って、0010、1010、1111、0011として、それぞれを16進数に変換します。</p>
<p>0010は、0＋0＋2＋0＝2です。<br />
1010は、8＋0＋2＋0＝10なので16進数でAです。<br />
1111は、1＋1＋1＋1＝15なので16進数でFです。<br />
0011は、0＋0＋1＋1＝3です。</p>
<p>したがって、0010101011110011は、16進数で2AF3であり、選択肢アが正解です。</p>
<div class="divider mag_tp50 mag_bt30"></div>
<p>
基本情報技術者試験の公開問題を見ると、過去に出題された問題の再利用が多いことがわかります。<br />
したがって、試験に合格するために最も効率的で効果的な学習方法は、過去問題を数多く解き、できなかった問題があれば、できるようになるまで練習することです。<br />
もしも、今回取り上げた問題がすぐにできなかったら、できるようになるまで練習してください。
</p>
<p>
それでは、またお会いしましょう！
</p>
<style>pre{background:#263238!important;border-radius:unset;}pre:not([class*="language-"]){font-family:'Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;color:#ccc;font-size:1em;padding:1em;}ol.background{padding-left:3em!important;}@media only screen and (max-width:600px){ol{padding-left:1em}dd{margin-left:2em}}.underline{border-bottom:1px solid;}code{padding: 0.15em 0.25em;}pre, code{background: #263238;color: #eceff1;border-radius: unset;font-size: 1em;line-height: 1.8;position: relative;}article, pre, code {
    font-family: 'consolas','Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;
}
img{width: 100%;}
article, pre, code {font-family: "Courier New","HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;}
</style><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/bitwise-operation/">ビット演算 | やさしい基礎理論</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>論理演算｜やさしい基礎理論</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/logicaloperations/</link>
		<pubDate>Thu, 04 Apr 2024 02:51:55 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[基礎理論]]></category>
		<category><![CDATA[論理演算]]></category>
		<category><![CDATA[過去問演習]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/?post_type=kind_basic_theory&#038;p=8264</guid>
		<description><![CDATA[<p>この連載は、基本情報技術者試験の受験者を対象としたものです。 多くの受験者が苦手としている「情報の基礎理論」の分野から毎回1つずつテーマをあげて、やさしくポイント解説と問題解説を行います。 苦手分野を克服して、試験の得点 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/logicaloperations/">論理演算｜やさしい基礎理論</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>
この連載は、基本情報技術者試験の受験者を対象としたものです。</p>
<p>多くの受験者が苦手としている「情報の基礎理論」の分野から毎回1つずつテーマをあげて、やさしくポイント解説と問題解説を行います。</p>
<p>苦手分野を克服して、試験の得点をアップしましょう。<br />
今回のテーマは、<span class="bold">論理演算</span>です。
</p>
<h2>論理演算の種類</h2>
<p>
「論理演算」は、命題を対象とした演算です。命題とは、真か偽かを判断できる文や式のことです。<br />
たとえば、「5は3より大きい（真と判断できる）」や「3は5より大きい（偽と判断できる）」などが命題です。</p>
<p>よく使われる論理演算の種類は、以下4つです。<br />
「<span class="u">and（論理積）</span>」・「<span class="u">or（論理和）</span>」・「<span class="u">not（否定）</span>」・「<span class="u">xor（排他的論理和、エックスオア）</span>」</p>
<p>これらの論理演算で、真と偽を演算して、演算結果も真か偽になります。真と偽のことを「<span class="bold">真理値</span>」と呼びます。</p>
<p>論理演算の意味は、英語の意味と同じです。<br />
andは「かつ」、orは「または」、notは「～でない」、xor（exclusive or）は「排他的にまたは」という意味です。</p>
<p class="grey lighten-5 c-round" style="padding: 1em;">
<span class="bold">A and Bの演算結果</span><br />
「AかつB」という意味なので、AとBの両方が真のときに真となり、その他の場合は偽になります。
</p>
<p class="grey lighten-5 c-round" style="padding: 1em;">
<span class="bold">A or Bの演算結果</span><br />
「AまたはB」という意味なので、AとBのいずれかが真のときに（両方が真でもよい）真となり、その他の場合は偽になります。
</p>
<p class="grey lighten-5 c-round" style="padding: 1em;">
<span class="bold">not Aの演算結果</span><br />
「Aでない」という意味なので、Aが真なら偽になり、Aが偽なら真になります。
</p>
<p class="grey lighten-5 c-round" style="padding: 1em;">
<span class="bold">A xor Bの演算結果</span><br />
「A 排他的にまたは B」という意味なので、AとBの一方だけが真のときに真となり、その他の場合は偽になります。どちらか一方だけが真であることを「排他的（他を排除する）」と呼んでいるのです。
</p>
<p>
A and BやA or Bのように、<span class="u">論理演算を使った式を論理式</span>と呼びます。</p>
<p>以下に論理式で、and、or、not、xorの演算結果を示したものを記載します。<br />
ここでは、AやBという変数ではなく、真および偽という値で、論理式と演算結果を示しています。
</p>
<div class="card-panel mag_h30 c-round">
【論理演算の結果】</p>
<p>（1）<span class="bold">and（論理積、かつ）</span></p>
<p class="grey lighten-5 c-round" style="padding: 1em;">
偽 and 偽 ＝ 偽<br />
偽 and 真 ＝ 偽<br />
真 and 偽 ＝ 偽<br />
真 and 真 ＝ 真
</p>
<p>（2）<span class="bold">or（論理和、または）</span> </p>
<p class="grey lighten-5 c-round" style="padding: 1em;">
偽 or 偽 ＝ 偽<br />
偽 or 真 ＝ 真<br />
真 or 偽 ＝ 真<br />
真 or 真 ＝ 真
</p>
<p>（3）<span class="bold">not（否定、～でない）</span></p>
<p class="grey lighten-5 c-round" style="padding: 1em;">
not 偽 ＝ 真<br />
not 真 ＝ 偽
</p>
<p>（4）<span class="bold">xor（排他的論理和、排他的にまたは）</span></p>
<p class="grey lighten-5 c-round" style="padding: 1em;">
偽 xor 偽 ＝ 偽<br />
偽 xor 真 ＝ 真<br />
真 xor 偽 ＝ 真<br />
真 xor 真 ＝ 偽
</p>
<p>論理演算は、プログラムの分岐処理やデータベースの検索などで、いくつかの条件（条件は命題の一種です）を結び付けたり、条件を否定したりするときに使われます。</p>
<p>真と偽の真理値を1と0の数値に対応させると、論理演算は2進数の演算であるとみなせます。<br />
たとえば、真 and 真 ＝ 真は、1 and 1 ＝ 1という2進数の演算とみなせます。<br />
コンピュータの内部では、電気信号で表された2進数を演算する仕組みとして、論理演算が使われています。</p>
<h2>ド・モルガンの法則</h2>
<p><strong>ド・モルガンの法則</strong>は、論理式を変形する法則です。<br />
以下にド・モルガンの法則を示します。</p>
<div class="card-panel mag_h30 c-round">
【ド・モルガンの法則】</p>
<p class="grey lighten-5 c-round" style="padding: 1em;">
法則（1） : <span class="bold">not (A and B) ＝ not A or not B</span><br />
「A and Bの結果をnotした論理式は、not Aとnot Bをorした論理式と等しい（論理式を変形できる）」
</p>
<p class="grey lighten-5 c-round" style="padding: 1em;">
法則（2） : <span class="bold">not (A or B) ＝ not A and not B</span><br />
「A or Bの結果をnotした論理式は、not Aとnot Bをandした論理式と等しい（変形できる）」
</p>
</div>
<p>ド・モルガンの法則は、人間の感覚として、すんなり理解できます。</p>
<p>例として、法則に示された論理式のAを「美味しい」、Bを「安い」として、and、or、notを「かつ」「または」「～でない」に置き換えてみましょう。</p>
<p>法則の（1）は「（美味しい、かつ、安い）でない ＝ 美味しくない、または、安くない」です。<br />
法則の（2）は「（美味しい、または、安い）でない ＝ 美味しくない、かつ、安くない」です。</p>
<p>どちらも、人間の感覚として、すんなり理解できるでしょう。</p>
<h2>論理演算に関する問題の例（その1）</h2>
<p>論理演算に関する問題を2つ紹介しましょう。<br />
はじめは、論理式の真理値から命題の真理値を求める問題です。</p>
<div class="card-panel mag_h30 c-round">
<p><span class="chip">問1（出典：H31春問3）</p>
<p>Ｐ、Ｑ、Ｒはいずれも命題である。命題Ｐの真理値は真であり、命題 (not Ｐ) or Ｑ及び命題 (not Ｑ) or Ｒのいずれの真理値も真であることが分かっている。Ｑ、Ｒの真理値はどれか。ここで、Ｘ or ＹはＸとＹの論理和、not ＸはＸの否定を表す。</p>
<figure style="display:block;width:100%; max-width:290px;margin: 0 auto;"><figcaption>　</figcaption><div class="material-placeholder"><img src="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/wp-content/uploads/2024/04/138a6c58f28316f3edc948eea0a51128.jpg" alt=""></div>
</figure>
</div>
<p>
＜解説＞<br />
一見して難しそうな問題に思えるかもしれませんが、論理演算の意味を知っていれば簡単に解けますので、落ち着いて順番に論理式を見ていきましょう。
</p>
<p>
まず、P ＝ 真なので、not P ＝ 偽です。<br />
次に、not P or Q ＝ 偽 or Q ＝ 真なので、Q ＝ 真です。<br />
次に、Q ＝ 真とわかったので、not Q ＝ 偽です。<br />
次に、not Q or R ＝ 偽 or R ＝ 真なので、R ＝ 真です。
</p>
<p>
以上のことから、PとQは、どちらも真であり、選択肢エが正解です。
</p>
<h2>論理演算に関する問題の例（その2）</h2>
<p>
次は、論理式を変形する問題です。<br />
ド・モルガンの法則を使うことで、問題に示された複雑な論理式をシンプルな論理式に変形できます。<br />
この問題では、and、or、notを・、＋、－（上付きのバー）で示しています。
</p>
<div class="card-panel mag_h30 c-round">
<p><span class="chip">問2（出典：H21春問3）</p>
<figure style="display:block;max-width:100%; max-width:600px;margin: 0 auto;"><figcaption></figcaption><div class="material-placeholder"><img src="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/wp-content/uploads/2024/04/fb127d914c59745c3dbdfe2bb12b9883.jpg" alt=""></div>
</figure>
</div>
<p>
＜解説＞<br />
問題に示された論理式を、and、or、notを使った表記にすると、not ((not A or B)and(A or not C))になります。<br />
これを見て「andの演算結果がnot演算されているので、ド・モルガンの法則を使って式を変形できる」と気付いてください。
</p>
<p>下記に、式を変形する手順の例を示します。</p>
<div class="card-panel mag_h30 c-round">
<p><span class="chip">ド・モルガンの法則を使って式を変形する手順の例</p>
<p>（1）<span style="color: red; ">not </span> (<span style="color: orange; ">(not A or B)</span> and <span style="color: blue; ">(A or not C)</span>)　・・・<span style="color: red; ">not</span> (<span style="color: orange; ">□</span> and <span style="color: blue; ">△</span>)の形式である。<br />
（2）<span style="color: red; ">not</span> <span style="color: orange; ">(not A or B)</span> or <span style="color: red; ">not</span> <span style="color: blue; ">(A or not C)</span>　・・・<span style="color: red; ">not</span> <span style="color: orange; ">□</span> or <span style="color: red; ">not</span> <span style="color: blue; ">△</span>に変形する。<br />
（3）<span style="color: red; ">not</span> <span style="color: orange; ">not A</span> and <span style="color: red; ">not</span> <span style="color: blue; ">B</span> <span style="color: gray; ">or not (A or not C))</span>　・・・式の前側を<span style="color: red; ">not</span> <span style="color: orange; ">□</span> and <span style="color: red; ">not</span> <span style="color: blue; ">△</span>に変形する。<br />
（4）<span style="color: fuchsia; ">A</span> <span style="color: gray; ">and not B or not (A or not C)</span>　・・・not not A＝Aなので<span style="color: fuchsia; ">A</span>に変形する。<br />
（5）<span style="color: gray; ">A and not B or</span> <span style="color: red; ">not</span> <span style="color: orange; ">A</span> and <span style="color: red; ">not</span> <span style="color: blue; ">not C</span>　・・・式の後側を<span style="color: red; ">not</span> <span style="color: orange; ">□</span> and <span style="color: red; ">not</span> <span style="color: blue; ">△</span>に変形する。<br />
（6）<span style="color: gray; ">A and not B or not A and</span> <span style="color: fuchsia; ">C</span>　・・・not not C＝Cなので<span style="color: fuchsia; ">C</span>に変形する。
</div>
<p>A and not B or not A and Cに変形できたので、選択肢アが正解です。</p>
<div class="divider mag_tp50 mag_bt30"></div>
<p>基本情報技術者試験の公開問題を見ると、過去に出題された問題の再利用が多いことがわかります。<br />
したがって、試験に合格するために最も効率的で効果的な学習方法は、できなかった問題があれば、できるようになるまで練習することです。<br />
もしも、今回取り上げた問題がすぐにできなかったら、できるようになるまで練習してください。
</p>
<p>それでは、またお会いしましょう！</p>
<style>pre{background:#263238!important;border-radius:unset;}pre:not([class*="language-"]){font-family:'Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;color:#ccc;font-size:1em;padding:1em;}ol.background{padding-left:3em!important;}@media only screen and (max-width:600px){ol{padding-left:1em}dd{margin-left:2em}}.underline{border-bottom:1px solid;}code{padding: 0.15em 0.25em;}pre, code{background: #263238;color: #eceff1;border-radius: unset;font-size: 1em;line-height: 1.8;position: relative;}article, pre, code {
    font-family: 'consolas','Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;
}
img{width: 100%;}
article, pre, code {font-family: "Courier New","HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;}
</style><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/logicaloperations/">論理演算｜やさしい基礎理論</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>情報の符号化｜やさしい基礎理論</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/encoding/</link>
		<pubDate>Mon, 18 Mar 2024 07:30:11 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[基礎理論]]></category>
		<category><![CDATA[過去問演習]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/?post_type=kind_basic_theory&#038;p=8231</guid>
		<description><![CDATA[<p>この連載は、基本情報技術者試験の受験者を対象としたものです。 多くの受験者が苦手としている「情報の基礎理論」の分野から毎回1つずつテーマをあげて、やさしくポイント解説と問題解説を行います。苦手分野を克服して、試験の得点を [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/encoding/">情報の符号化｜やさしい基礎理論</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>この連載は、基本情報技術者試験の受験者を対象としたものです。</p>
<p>多くの受験者が苦手としている「情報の基礎理論」の分野から毎回1つずつテーマをあげて、やさしくポイント解説と問題解説を行います。苦手分野を克服して、試験の得点をアップしましょう。</p>
<p>今回のテーマは、 <span class="bold">情報の符号化</span> です。</p>
<style>
.underline {
  border-bottom: 1px solid;
}
</style>
<h2>ビット数と表せる情報の個数</h2>
<p>コンピュータの内部では、あらゆる情報を数値で取り扱っています。そのため、文字や画像など本来数値ではない情報を取り扱うには、それらを数値で表す必要があります。 <span class="underline">本来数値ではない情報を数値で表したもの</span> を「 <span class="bold">符号（コード）</span> 」と呼び、 <span class="underline">情報を数値に置き換えること</span> を「 <span class="bold">符号化</span> 」と呼びます。</p>
<p>コンピュータの内部では、0と1だけで数値を表す2進数が使われています。2進数のビット数（桁数）によって、表せる情報の個数が決まります。1ビットで表せる情報は、0と1の2個です。</p>
<p>「ONとOFF」や「YesとNo」という情報であれば、1ビットで符号化できます。たとえば「ON＝1、OFF＝0」や「Yes＝1、No＝0」とします。2ビットで表せる情報は、00、01、10、11の4個です。「春夏秋冬」や「東西南北」という情報であれば、2ビットで符号化できます。たとえば「春＝00、夏＝01、秋＝10、冬＝11」や「東＝00、西＝01、南＝10、北＝11」とします。</p>
<p>表1に1～8ビットで表せる数値の範囲と情報の個数を示します。</p>
<div class="card-panel mag_h30">
<p class="center">表1　1～8ビットで表せる数値の範囲と情報の個数</p>
<table style="margin:auto;max-width:370px;">
<thead>
<tr>
<th>ビット数</th>
<th>数値の範囲</th>
<th>情報の個数</th>
</thead>
<tbody>
<tr>
<td>1</td>
<td>0～1</td>
<td>2</td>
</tr>
<tr>
<td>2</td>
<td>00～11</td>
<td>4</td>
</tr>
<tr>
<td>3</td>
<td>000～111</td>
<td>8</td>
</tr>
<tr>
<td>4</td>
<td>0000～1111</td>
<td>16</td>
</tr>
<tr>
<td>5</td>
<td>00000～11111</td>
<td>32</td>
</tr>
<tr>
<td>6</td>
<td>000000～111111</td>
<td>64</td>
</tr>
<tr>
<td>7</td>
<td>0000000～1111111</td>
<td>128</td>
</tr>
<tr>
<td>8</td>
<td>00000000～11111111</td>
<td>256</td>
</tr>
</tbody>
</table>
</div>
<p>1ビット増えるごとに、表せる情報の個数は2倍になります。<br />
1ビットなら2個、2ビットなら2×2＝4個、3ビットなら2×2×2＝8個、・・・、8ビットなら2×2×2×2×2×2×2×2＝256個です。<br />
nビットなら2をn回掛けるので2のn乗個です。</p>
<h2>固定長符号と可変長符号</h2>
<p>符号には、「 <span class="bold">固定長符号</span> 」と「 <span class="bold">可変長符号</span> 」があります。<br />
固定長符号は、すべての情報を同じビット数で符号化したものです。<br />
可変長符号は、情報によってビット数を変えたものです。<br />
取り扱いが簡単なので、多くの場合に、固定長符号が使われますが、可変長符号を使うと、数多くの情報を格納したファイルや通信データの全体のサイズを小さくできる、というメリットがあります。</p>
<p>可変長符号では、連続して並べられた情報から個々の符号を区切れるように符号化しなければなりません。<br />
たとえば、極端な例ですが「1111111111111111」という連続して並べられた情報があるとしましょう。これが8ビットの固定長符号なら、8ビットごとに「11111111」「11111111」と区切って2つの情報だとわかりますが、1、11、111、1111という可変長符号を並べたものなら、どこで区切ればよいのかがわかりません。個々の符号を区切れる可変長符号の具体例は、後で示す「情報の符号化に関する問題の例（その2）」で紹介します。</p>
<h2>情報の符号化に関する問題の例（その1）</h2>
<p>情報の符号化に関する問題を2つ紹介しましょう。<br />
はじめは、ビット数が増えるとビットパターンの個数（表せる情報の個数）が何倍になるかという問題です。</p>
<div class="card-panel mag_h30">
<p>問題1 （出典：H28秋問4）<br />
32ビットで表現できるビットパターンの個数は、24ビットで表現できる個数の何倍か。</p>
<p>ア：8<br />
イ：16　　<br />
ウ：128　　<br />
エ：256
</p></div>
<p>＜解説＞<br />
1ビット増えるごとに、表せる情報の個数は2倍になります。32ビットは、24ビットより32－24＝8ビット多いので、表せる情報の個数は2×2×2×2×2×2×2×2＝256倍です。したがって、選択肢エが正解です。</p>
<h2>情報の符号化に関する問題の例（その2）</h2>
<p>次は、可変長符号であるハフマン符号の問題です。<br />
ハフマンは、この符号化の考案者（David Albert Huffman）の名前です。</p>
<div class="card-panel mag_h30">
<p>問題２（出典：H30秋問4）<br />
出現頻度の異なるA，B，C，D，Eの5文字で構成される通信データを，ハフマン符号化を使って圧縮するために，符号表を作成した。aに入る符号として，適切なものはどれか。</p>
<figure style="display:block;margin: 0 auto;">
<div class="material-placeholder" style="margin:auto;text-align:center;width:80%;max-width: 500px;"><img src="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/wp-content/uploads/2024/03/cb9c6fdc2ce9cb8cf6d37f5aee47f25d.jpg" alt=""></div>
</figure>
<p>ア：001<br />
イ：010　　<br />
ウ：101　　<br />
エ：110　</p>
</div>
<p>＜解説＞<br />
「ハフマン符号」は、出現頻度の多い情報ほど少ないビット数で符号化する（逆に言えば、出現頻度の少ない情報ほど多いビット数で符号化する）ことで、ファイルや通信データの全体のサイズを小さくします。</p>
<p>この問題では、A、B、C、D、Eの5つの文字（情報）があり、それを固定長符号で符号化すると、A＝000、B＝001、C＝010、D＝011、E＝100のように、すべて3ビットになります。仮に、データ全体で100文字あるとすれば、そのサイズは3ビット×100文字＝300ビットです。<br />
これを、問題に示された可変長のハフマン符号で符号化すると、A＝00（2ビット）、B＝10（2ビット）、C＝（2ビット）、D＝［　a　］（後で答えを示しますが3ビットです）、E＝111（3ビット）です。仮に、データ全体に100文字あるとすれば、A、B、C、D、Eの出現頻度が、26%、25%、24%、13%、12%なので、それぞれ26文字、25文字、24文字、13文字、12文字です。データ全体のサイズは、26文字×2ビット＋25文字×2ビット＋24文字×2ビット＋13文字×3ビット＋12文字×3ビット＝225ビットです。固定長符号の300ビットと比べて、データ全体のサイズが小さくなりました。</p>
<p>ハフマン符号は、「ハフマン木」を使って作ります。この問題のハフマン木を図1に示します。</p>
<div class="card-panel mag_h30">
<figure style="display:block;margin: 0 auto;"><figcaption>図1　ハフマン符号はハフマン木を使って作る</figcaption><div class="material-placeholder" style="margin:auto;text-align:center;width:80%;max-width: 500px;"><img src="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/wp-content/uploads/2024/03/795316b92fc766b0181f6fef074f03fa.jpg" alt=""></div>
</figure>
</div>
<p>ハフマン木は、以下の手順で作成します。</p>
<p>（1）出現頻度の多い順に、出現頻度と情報（ここでは文字）を横方向に並べる。<br />
（2）出現頻度の少ない順に2つを選んで枝（直線）で結び、その節（枝の結合部）に、2つの出現頻度を足した値を書き添える。<br />
（3）木の枝が1つの根（木の最上部の結合部）にまとめられるまで、（2）を繰り返す。<br />
（4）根から個々の情報までたどる枝の左側に0を、右側に1を書き添える。<br />
（5）根から個々の情報までたどり、その際に通過した枝の0または1を上位桁から並べたものがハフマン符号になるので、それを個々の情報の下に書き添える。</p>
<p>出現頻度の多い情報ほど、木の根からその情報にたどりつくまでの枝の数が少なくなるので、符号のビット数が少なくなります。逆に、出現頻度の少ない情報ほど、木の根からその情報にたどりつくまでの枝の数が多くなるので、符号のビット数が多くなります。</p>
<p>Dのハフマン符号は、ハフマン木を根からDまでたどると1→1→0なので、110です。<br />
したがって、この問題の正解は、選択肢エです。</p>
<p>ハフマン木で作られたハフマン符号は、連続して並べた情報から個々の符号を区切れます。ハフマン木で、根からそれぞれの情報にたどりつくまでの道筋は1つだけなので、連続して並べても区別できる符号になるからです。<br />
たとえば、101110011001は、先頭から順に図1のハフマン符号に割り当てていくと、「10」「111」「00」「110」「01」に区切れるので、C、E、A、D、Bだとわかります。</p>
<p>＊　　　　＊　　　　＊</p>
<p>基本情報技術者試験の公開問題を見ると、過去問題（過去の試験に出題された問題）の再利用が多いことがわかります。<br />
したがって、試験に合格するために最も効率的で効果的な学習方法は、過去問題を数多く解き、できなかった問題があれば、できるようになるまで練習することです。もしも、今回取り上げた問題がすぐにできなかったら、できるようになるまで練習してください。</p>
<p>それでは、またお会いしましょう！</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/kind_basic_theory/encoding/">情報の符号化｜やさしい基礎理論</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
	</channel>
</rss>
