<?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/mastering_tech/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>基本情報でわかる IPアドレス と サブネットマスク</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/ip_address_subnet_mask/</link>
		<pubDate>Mon, 15 Mar 2021 06:55:23 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[IPアドレス]]></category>
		<category><![CDATA[ネットワーク]]></category>
		<category><![CDATA[午前問題と午後問題の違い]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=mastering_tech&#038;p=5217</guid>
		<description><![CDATA[<p>この連載では、基本情報技術者試験によく出題されるテクノロジー関連の用語を、午前問題と午後問題のセットを使って解説します。 午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/ip_address_subnet_mask/">基本情報でわかる IPアドレス と サブネットマスク</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>午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸暗記では得られない明確さで、用語を理解できるようになります。</p>
<p>今回のテーマは、 <span class="bold">IPアドレス</span> と <span class="bold">サブネットマスク</span> です。</p>
<style>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;font-size:1em;line-height:1.8;}pre{margin:.5em auto;}dl.inline dd{margin-left:9em;}td{border:.1em #d1d1d1 solid}.stripe-red{background-color:rgba(253, 253, 253, 1);background-image:repeating-linear-gradient(45deg,transparent,transparent 10px,rgba(255,39,39,0.17) 10px,rgba(255,39,39,0.17) 20px);}.stripe-purple{background-color:rgba(253, 253, 253, 1);background-image:repeating-linear-gradient(45deg,transparent,transparent 10px,rgba(255,39,254,0.17) 10px,rgba(255,39,254,0.17) 20px);}</style>
<h2>そもそもインターネットとは？</h2>
<p>もしも、「インターネットをご存じですか？」と尋ねたら、ほとんどの人が「もちろん知っています！」と答えるでしょう。それでは、「インターネットの <span class="u">インター</span> という言葉の意味をご存じですか？」と尋ねたら、多くの人が答えに悩んでしまうでしょう。</p>
<p>インターネットのインター（ inter ）は、「間の」という意味です。 <span class="bold">インターネットは、ネットワークとネットワークの間をつないだもの</span>なのです。</p>
<p>ここで、「ネットワーク」という言葉の意味にも注目してください。</p>
<p>一般的には、ネットワークは、様々な形式や規模のネットワークの総称ですが、 IT 用語では、オフィス内や企業内のネットワークのように、ひとつの小さなネットワークを指します。この小さなネットワークの間をルータという中継装置でつなぐことで、ネットワークの規模が大きくなります。そして、様々なプロバイダが提供するルータ網に接続することで、いわゆるインターネットに接続されるのです。</p>
<p>&nbsp;</p>
<p>「インターネットは、ネットワークとネットワークの間をつないだものである」ということがわかれば、今回のテーマである IP アドレスとサブネットマスクの仕組みもわかります。</p>
<ul class="background c-round">
  <span class="bold">IPアドレス</span></p>
<li>インターネットにおけるホスト（パソコン、サーバ、ルータなど、何らかの通信機器）を識別する番号です</li>
<li>ホストは、何らかのネットワークに所属しています</li>
<li>そのため IPアドレスは、上位桁がネットワークアドレス（ネットワークを識別する番号）、下位桁がホストアドレス（ホストを識別する番号）という形式になっています
<ul>
<li><span class="u">「総務部に所属した山田さん」のように、「ネットワークアドレスに所属した、ホストアドレスさん」という形式</span></li>
</ul>
</li>
<li>この上位桁と下位桁の区切りを示すのが、 <span class="bold">サブネットマスク</span>です</li>
</ul>
<h2>IPアドレスとサブネットマスクに関する午前問題 ～ IPアドレスとは？ サブネットマスクとは？</h2>
<p>IPアドレスとサブネットマスクの具体例として、午前問題を見てみましょう。以下に、問題を示します。</p>
<p>IPアドレスの規格には、 IPv4 と IPv6 がありますが、この記事で取り上げている問題では、 IPv4 をテーマにしています。</p>
<div class="card-panel mag_h30">
問 35　平成 29 年度 秋期 午前</p>
<p>次の IP アドレスとサブネットマスクをもつ PC がある。この PC のネットワークアドレスとして，適切なものはどれか。</p>
<dl class="inline">
<dt>IP アドレス:</dt>
<dd>10.170.70.19</dd>
<dt>サブネットマスク:</dt>
<dd>255.255.255.240</dd>
</dl>
<p>ア　10.170.70.0　　<br class="hide-on-med-and-up">イ　10.170.70.16<br />
ウ　10.170.70.31　　<br class="hide-on-med-and-up">エ　10.170.70.255
</div>
<p>IPアドレスとサブネットマスクは、どちらも全体で 32 ビットの数値であり、それを 8 ビットずつドットで区切って、それぞれの部分を 10 進数で示します。</p>
<p>問題に示された、 <code>255.255.255.240</code> というサブネットマスクを 2 進数で表すと、</p>
<pre><span class="blue-text">11111111.11111111.11111111.1111</span><span class="red-text">0000</span></pre>
<p>です。このように、サブネットマスクは、上位桁に 1 を並べ、下位桁に 0 を並べたものとなっていて、それらによって、 IPアドレスの上位桁と下位桁の区切りを示します。</p>
<p>ここでは、上位桁に 1 が 28 ビット並び、下位桁に 0 が 4 ビット並んでいるので、 IPアドレスの上位 28 ビットがネットワークアドレスであり、下位 4 ビットがホストアドレスです。</p>
<figure><figcaption>サブネットマスクの仕組み</figcaption><img width="744" height="585" class="materialboxed z-depth-5 responsive-width pad_05" src="../../wp-content/uploads/2021/03/ip_address.jpg" loading="lazy"><br />
</figure>
<p><code>10.170.70.19</code> という IPアドレスを 2 進数で表すと</p>
<pre>
00001010.10101010. 01000110.00010011
</pre>
<p>です。上位 28 ビットの</p>
<pre>
<span class="blue-text">00001010.10101010. 01000110.0001</span>
</pre>
<p>がネットワークアドレスですが、<span class="u">ネットワークアドレスだけを示すときは、ホストアドレスの部分を 0 で埋める約束になっています。</span></p>
<p>したがって、下位 4 ビットを 0 で埋めた</p>
<pre><span class="blue-text">00001010.10101010. 01000110.0001</span><span class="red-text">0000</span></pre>
<p>がネットワークアドレスであり、 10 進数で示すと、 <code>10.170.70.16</code> になります。選択肢イが正解です。</p>
<p class="mag_tp20 mag_bt40"><span class="chip mag_rt05">解答</span>イ</p>
<h2>IPアドレス と サブネットマスク に関する午後問題</h2>
<p>今度は、 IPアドレスとサブネットマスクに関する午後問題を見てみましょう。</p>
<p>基本情報技術者試験の午後問題は、 IT に関する用語や概念を事例（架空の事例）に仕立てたものです。以下に問題（一部を抜粋したもの）を示しますので、ざっと目を通してください。すぐ後で、問題の内容を説明します。</p>
<div class="card-panel mag_h30">
問 3　平成 25 年度 秋期 午後（一部抜粋）</p>
<p>ネットワークの構築に関する次の記述を読んで，設問 1， 2 に答えよ。</p>
<div class="mag_lt10">　D 社の現在のネットワーク構成を図 1 に示す。 DMZ にはメールサーバ， DNS サー バ及び社外公開用 Web サーバを接続しており，ネットワーク A には社内システムを 稼働させる Web サーバを，ネットワーク B には社員が通常業務を行うための業務用 PC を接続している。</p>
<p>　ファイアウォールはインターネットから基幹ネットワークへ向けた通信と基幹ネッ トワークからインターネットに向けた通信を全て遮断している。したがって，業務用 PC から社内にある社外公開用 Web サーバや社内システム Web サーバへはアクセス できるが，社外の Web サーバへはアクセスできない。
</p></div>
<figure>
<img width="678" height="390" class="materialboxed z-depth-5 responsive-width pad_05" src="../../wp-content/uploads/2021/03/q3_figure_network.jpg" loading="lazy"></p>
<p class="small-text blue-grey-text center"><span class="bold mag_rt05">注</span>数字は各ルータ及び社内システム Web サーバ 1 のそれぞれのネットワークでの IP アドレスである。</p><figcaption>図 1　D 社の現在のネットワーク構成</figcaption></figure>
<p class="bold">設問 1</p>
<p>次の記述中の<span class="blank"></span>に入れる正しい答えを，解答群の中から選べ。</p>
<div class="mag_lt10">　D 社の各ネットワークに接続された機器の IP アドレスからネットワーク A のサブネットマスクは<span class="blank">a</span>であることが分かる。ネットワーク A のネットワークアドレスとサブネットマスクを考慮すると，次に示す IP アドレスのうち，社内システム Web サーバ 2 に設定可能なものは，<span class="blank">b</span>個ある。</p>
<p>〔IPアドレス〕</p>
<div class="table-container">
<table class="responsive-width">
<tbody>
<tr>
<td>10.0.0.2</td>
<td>10.0.0.3</td>
<td>10.0.0.4</td>
<td>10.0.1.1</td>
<td>10.0.1.2</td>
</tr>
<tr>
<td>10.0.1.3</td>
<td>10.0.2.1</td>
<td>10.0.2.2</td>
<td>10.0.2.3</td>
<td>10.0.2.4</td>
</tr>
</tbody>
</table>
<p><span class="hide-on-med-and-up grey-text small-text"><i class="material-icons mag_rt05">info</i>右にスクロールできます</span>
</div>
</div>
<p>a に関する解答群</p>
<p>ア　255.0.0.0　　<br class="hide-on-med-and-up">イ　255.255.0.0<br />
ウ　255.255.255.0　　<br class="hide-on-med-and-up">エ　255.255.255.128</p>
<p>b に関する解答群</p>
<p>ア　1　　イ　2　　<br class="hide-on-med-and-up">ウ　3　　エ　4<br />
オ　5　　カ　6　　<br class="hide-on-med-and-up">キ　7　　ク　8
</div>
<p>D 社には、</p>
<ul class="background c-round">
<li>DMZ（ De-Militarized Zone = 非武装地帯）</li>
<li>基幹ネットワーク</li>
<li>ネットワーク A</li>
<li>ネットワーク B</li>
</ul>
<p>というネットワークがあり、それぞれがルータおよびファイアウォールでつながれています。</p>
<h3>サブネットマスクを求める</h3>
<p>設問 1 の空欄 a は、「ネットワーク A のサブネットマスクを求めよ」という問題です。</p>
<p>ネットワーク A にあるルータの IPアドレスは</p>
<pre>10.0.1.1</pre>
<p>であり、<br />
Web サーバ 1 の IPアドレスは</p>
<pre>10.0.1.200</pre>
<p>です。</p>
<p><span class="u">同じネットワークにあるホストは、 IPアドレスのネットワークアドレスが同じ</span>なので、 <code>10.0.1</code> までの部分、つまり上位 24 ビットまでがネットワークアドレスだと思われます。</p>
<p>この範囲を 2 進数で示すと</p>
<pre>11111111.11111111.11111111</pre>
<p>であり、<br />
10 進数で示すと</p>
<pre>255.255.255</pre>
<p>です。</p>
<p>解答群を見ると、</p>
<pre>255.255.255.0</pre>
<p>という選択肢ウと、</p>
<pre>255.255.255.128</pre>
<p>という選択肢エがあるので、これらに正解を絞り込めます。</p>
<p>&nbsp;</p>
<p>それでは、 <code>255.255.255.0</code> と <code>255.255.255.128</code> のどちらが適切でしょうか？</p>
<div class="background c-round">
<pre>255.255.255.0</pre>
<p>を 2 進数で示すと</p>
<pre>
<span class="blue-text">11111111.11111111.11111111.<span class="red-text">00000000</span>
<span class="hide-on-med-and-up grey-text small-text"><i class="material-icons mag_rt05">info</i>右にスクロールできます</span>
</pre>
<p>なので、下位 8 ビットがホストアドレスです。 8 ビットで表せるのは、 <code>00000000</code> ～ <code>11111111</code> であり、 10 進数で 0 ～ 255 です。</p>
<p>したがって、 <code>10.0.1.1</code> の 1 というホストアドレスも、 <code>10.0.1.200</code> の 200 というホストアドレスも表せます。
</div>
<div class="background c-round">
<pre>255.255.255.128</pre>
<p>を 2 進数で表すと、</p>
<pre>
<span class="blue-text">11111111.11111111.11111111.1</span><span class="red-text">0000000</span>
<span class="hide-on-med-and-up grey-text small-text"><i class="material-icons mag_rt05">info</i>右にスクロールできます</span>
</pre>
<p>なので、下位 7 ビットがホストアドレスです。 7 ビットで表せるのは、 <code>0000000</code> ～ <code>1111111</code> であり、 10 進数で 0 ～ 127 です。</p>
<p>したがって、 <code>10.0.1.1</code> の 1 というホストアドレスを表せますが、 <code>10.0.1.200</code> の 200 というホストアドレスを表せません。
</div>
<p>したがって、サブネットマスクは、 <code>255.255.255.0</code> が適切であり、選択肢ウが正解です。</p>
<h3>IPアドレスを求める</h3>
<p>設問 1 の空欄 b は、「ネットワーク A にある Web サーバ 2 に設定可能な IPアドレスを求めよ」という問題です。</p>
<p>ネットワーク A のサブネットマスクは、上位 24 ビットがネットワークアドレスなので、 IPアドレスの上位桁は、 <code>10.0.1</code> でなければなりません。下位 8 ビットがホストアドレスなので、 <code>00000000</code> ～ <code>11111111</code> の範囲（ 10 進数で 0 ～ 255 の範囲）を下位桁に設定できます。</p>
<p>&nbsp;</p>
<p><span class="bold">ただし、すべてが 0 のホストアドレスと、すべてが 1 のホストアドレスは、設定できない約束になっています。</span></p>
<dl class="background c-round">
<dt class="bold">すべてが 0 のホストアドレス</dt>
<dd>ネットワークアドレスを示すために使われる</dd>
<dt class="bold">すべてが 1 のホストアドレス</dt>
<dd>ブロードキャスト（同じネットワーク内にあるすべてのホストを宛先にして通信すること）を意味する</dd>
</dl>
<p>そして、これは当然のことですが、すでに他のホストに設定されているホストアドレスは、設定できません。</p>
<p>&nbsp;</p>
<p>以下は、問題に示された IPアドレスの中から、</p>
<ul>
<li>ネットワークアドレスが <code>10.0.1</code> でないものに赤色のアミカケ</li>
<li>すでに他のホストに設定されているホストアドレスに紫色のアミカケ</li>
</ul>
<p>を付けたものです（ここでは、すべてが 0 のホストアドレスと、すべてが 1 のホストアドレスはありません）。</p>
<div class="table-container">
<table class="responsive-width">
<tbody>
<tr>
<td class="stripe-red">10.0.0.2</td>
<td class="stripe-red">10.0.0.3</td>
<td class="stripe-red">10.0.0.4</td>
<td class="stripe-purple">10.0.1.1</td>
<td>10.0.1.2</td>
</tr>
<tr>
<td>10.0.1.3</td>
<td class="stripe-red">10.0.2.1</td>
<td class="stripe-red">10.0.2.2</td>
<td class="stripe-red">10.0.2.3</td>
<td class="stripe-red">10.0.2.4</td>
</tr>
</tbody>
</table>
<p><span class="hide-on-med-and-up grey-text small-text"><i class="material-icons mag_rt05">info</i>右にスクロールできます</span>
</div>
<p>アミカケを付けていない IP アドレスは、 2 つあり、これらのいずれかを Web サーバ 2 に設定できます。したがって、選択肢イが正解です。</p>
<p>&nbsp;</p>
<p><span class="chip mag_rt05">解答</span>設問 1　a &#8211; ウ, b &#8211; イ</p>
<div class="divider mag_h50"></div>
<p>いかがでしたか？</p>
<p>午前問題と午後問題のセットで、　IPアドレスとサブネットマスクを十分に理解できたでしょう。</p>
<p>この連載は、今回で最終回になります。</p>
<p>これまで連載をお読みいただき、ありがとうございました。どこかで、また、お会いしましょう！</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/ip_address_subnet_mask/">基本情報でわかる IPアドレス と サブネットマスク</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/mastering_tech/white_box_testing/</link>
		<pubDate>Tue, 09 Mar 2021 07:41:51 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[ソフトウェア設計]]></category>
		<category><![CDATA[午前問題と午後問題の違い]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=mastering_tech&#038;p=5187</guid>
		<description><![CDATA[<p>この連載では、基本情報技術者試験によく出題されるテクノロジー関連の用語を、午前問題と午後問題のセットを使って解説します。 午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/white_box_testing/">基本情報でわかる ホワイトボックステスト</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>午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸暗記では得られない明確さで、用語を理解できるようになります。</p>
<p>今回のテーマは、 <span class="bold">ホワイトボックステストの「命令網羅」と「分岐網羅」</span> です。</p>
<style>pre{font-family:'consolas','Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;background:#292a33;color:#eceff1;font-size:1em;line-height:1.8;margin:1em -7.5%;padding:1em 7.5%}.card-panel pre{margin:1em -24px;padding:1em 24px}dl.inline dd{margin-left:2em;}.underline{border-bottom:.2em solid white}th{text-align:center;}@media screen and (min-width:601px){.responsive-width{width:50%}}</style>
<h2>ホワイトボックステストとは？ 命令網羅とは？ 分岐網羅とは？</h2>
<p>システム全体は、いくつかの要素に分けて開発されます。<span class="u">個々の要素をテストするときには、内部構造に着目したホワイトボックステスト</span>を行い、<span class="u">システム全体をテストするときには、外部仕様に着目したブラックボックステスト</span>を行います。</p>
<ul class="background c-round">
<li>ホワイトボックステストは、内部が見えるテストという意味</li>
<li>ブラックボックステストは、内部が見えないテストという意味</li>
</ul>
<p>いずれの場合も、テストを行うときには、テストの目的に合ったテストデータを使うことが重要です。</p>
<p>&nbsp;</p>
<p>この記事のテーマは、ホワイトボックステストです。</p>
<p>ホワイトボックステストでは、プログラムの設計図であるフローチャートを網羅するテストデータを使います。その際の考え方として、 <span class="bold">命令網羅</span> と <span class="bold">分岐網羅</span> があります。</p>
<dl class="background c-round">
<dt class="bold">命令網羅</dt>
<dd>すべての命令を網羅するテストデータを使います。わかりやすく言うと、フローチャートの中にある図形（処理を表す四角形や、条件を表すひし形など）を網羅する</dd>
<dt class="bold">分岐網羅</dt>
<dd>すべての処理の流れを網羅するテストデータを使います。わかりやすく言うと、フローチャートの中にある線（処理の流れを表す線）を網羅する</dd>
</dl>
<p>シンプルなフローチャートを例にして、命令網羅と分岐網羅の違いを示しましょう。以下のフローチャートでは、 a > 0 という条件が Yes なら a の値を表示します。</p>
<figure><figcaption>テスト対象のフローチャート</figcaption><img width="419" height="441" class="materialboxed z-depth-5 responsive-width pad_05" src="../../wp-content/uploads/2021/03/flowchart_1.jpg" loading="lazy"><br />
</figure>
<p><span class="u">命令網羅では、a > 0 という条件が Yes になるテストデータだけを使います。</span> たとえば、 a に 1 を設定します。それによって、フローチャートの中にあるひし形と四角形の図形を網羅できるからです。</p>
<figure><figcaption>命令網羅 ( a に 1 を設定)</figcaption><img width="417" height="447" class="materialboxed z-depth-5 responsive-width pad_05" src="../../wp-content/uploads/2021/03/flowchart_2.jpg" loading="lazy"><br />
</figure>
<p><span class="u">分岐網羅では、a > 0 という条件が Yes になるテストデータと、 No になるテストデータを使います。</span> たとえば、 a に 1 および -1 を設定します。それによって、フローチャートの中にある処理の流れの線を網羅できるからです。</p>
<p>多くの場合に、命令網羅より分岐網羅の方が、より詳細なテストになるので、より多くのテストデータを使います。</p>
<div class="row">
<div class="col m6 s12">
<figure><figcaption>分岐網羅 ( a に 1 を設定)</figcaption><img width="419" height="448" class="materialboxed z-depth-5" src="../../wp-content/uploads/2021/03/flowchart_3.jpg" loading="lazy"><br />
</figure>
</div>
<div class="col m6 s12">
<figure><figcaption>分岐網羅 ( a に -1 を設定)</figcaption><img width="417" height="441" class="materialboxed z-depth-5" src="../../wp-content/uploads/2021/03/flowchart_4.jpg" loading="lazy"><br />
</figure>
</div>
</div>
<h2>命令網羅に関する午前問題</h2>
<p>それでは、命令網羅と分岐網羅に関する午前問題を見てみましょう。以下は、命令網羅に関する午前問題です。</p>
<div class="card-panel mag_h30">
問 49　平成 28 年度 春期 午前</p>
<p>流れ図で表される部分を命令網羅によってテストするとき，テストケースは少なくとも幾つ用意する必要があるか。</p>
<figure>
<img width="534" height="633" class="materialboxed z-depth-5 responsive-width pad_05" src="../../wp-content/uploads/2021/03/q48_flowchart.jpg" loading="lazy"><br />
</figure>
<p>ア　2　　イ　3　　ウ　4　　エ　5
</p></div>
<p>ここでは、命令網羅なので、フローチャートの中にある図形を網羅します。</p>
<p>問題に示されたフローチャートには、 a = 0 という条件（ひし形）と、 b = 0 という条件（ひし形）があり、それぞれに応じた処理（四角形）があります。テストデータとして、たとえば、 a に 0 、 b に 0 を設定すれば、以下の図形を網羅できます。ここで、網羅できてないのは、処理（四角形）が 2 つです。</p>
<figure><figcaption>a に 0 、 b に 0 を設定して網羅できる図形</figcaption><img width="607" height="720" class="materialboxed z-depth-5 responsive-width pad_05" src="../../wp-content/uploads/2021/03/flowchart_5.jpg" loading="lazy"><br />
</figure>
<p>もうひとつ別のテストデータとして、たとえば、 a に 1 、 b に 1 を設定すれば、以下の図形を網羅できます。</p>
<figure><figcaption>a に 1 、 b に 1 を設定して網羅できる図形</figcaption><img width="611" height="724" class="materialboxed z-depth-5 responsive-width pad_05" src="../../wp-content/uploads/2021/03/flowchart_6.jpg" loading="lazy"><br />
</figure>
<p>これで、すべての図形を網羅できたので、テストケース（テストデータの種類）は、 2 であり、選択肢アが正解です。</p>
<p class="mag_tp20 mag_bt40"><span class="chip mag_rt05">解答</span>ア</p>
<h2>分岐網羅に関する午前問題</h2>
<p>以下は、　分岐網羅に関する午前問題です。</p>
<div class="card-panel mag_h30">
問 49　平成 29 年度 春期 午前</p>
<p>流れ図において，判定条件網羅（分岐網羅）を満たす最小のテストケース数は幾つか。</p>
<figure>
<img width="723" height="683" class="materialboxed z-depth-5 responsive-width pad_05" src="../../wp-content/uploads/2021/03/q49_flowchart.jpg" loading="lazy"><br />
</figure>
<p>ア　1　　イ　2　　ウ　3　　エ　4
</p></div>
<p>ここでは、分岐網羅なので、フローチャートの中にある線を網羅します。</p>
<p>問題に示されたフローチャートには、</p>
<div class="background c-round">
X > 1 という条件（ひし形）と、<br />
A ＝ 2 or B ＝ 0 という条件（ひし形）があり、<br />
それぞれが真のときだけ処理（四角形）
</div>
<p>があります。</p>
<p>テストデータとして、たとえば、 X に 2 、 A に 2 、 B に 0 を設定すれば、以下のようにすべての図形を網羅でき、命令網羅になります。ただし、この問題は、分岐網羅のテストケース数を求めるものなので、まだ網羅できていない 2 か所の線を網羅しなければなりません。</p>
<figure><figcaption>X に 2 、 A に 2 、 B に 0 を設定して網羅できる線</figcaption><img class="materialboxed z-depth-5 responsive-width pad_05" src="../../wp-content/uploads/2021/03/flowchart_7.jpg" loading="lazy"><br />
</figure>
<p>もうひとつ別のテストデータとして、たとえば、 X に 0 、 A に 1 、 B に 1 を設定すれば、以下の線を網羅できます。これで、すべての線を網羅できたので、テストケース数は、 2 であり、選択肢イが正解です。</p>
<figure><figcaption>X に 0 、 A に 1 、 B に 1 を設定して網羅できる線</figcaption><img class="materialboxed z-depth-5 responsive-width pad_05" src="../../wp-content/uploads/2021/03/flowchart_8.jpg" loading="lazy"><br />
</figure>
<p class="mag_tp20 mag_bt40"><span class="chip mag_rt05">解答</span>イ</p>
<h2>命令網羅と分岐網羅に関する午後問題</h2>
<p>今度は、命令網羅と分岐網羅に関する午後問題を見てみましょう。以下に問題（問題の一部を抜粋したもの）を示します。すぐ後で、内容を説明しますので、ざっと目を通しておいてください。</p>
<div class="card-panel mag_h30">
問 5　平成 25 年度 秋期 午後（一部抜粋）</p>
<p>　ソフトウェアのテスト設計に関する次の記述を読んで，設問 1 ~ 3 に答えよ。</p>
<div class="mag_lt10">　システムインテグレータの N 社は，開発したプログラムに対するバグの摘出漏れの削減を目的として，テストの方法を見直している。</p>
<p>〔 N 社のテスト方法に関する説明〕<br />
　N 社では主にホワイトボックス法の一つである制御フローテストで，開発したプログラムのテストを実施している。</p>
<p>　制御フローテストは，プログラムを構成する最小単位である命令，経路，判定条件に着目し，テスト計画時に定めたカバレッジ基準を満たすテストケース，テストデータを作成して，開発したプログラムの動作を確認するテスト方法である。</p>
<p>　カバレッジ基準としては，テストにおいて全ての命令文を1回は実行する命令網羅，全ての分岐について分岐後の全ての経路を1回は実行する判定条件網羅 (以下，分岐網羅という) などがある。</p>
<p>　N 社は，カバレッジ基準として分岐網羅を採用している。</p>
<p>〔 N 社が採用している分岐網羅の判定条件に関する説明〕<br />
　分岐の判定条件には，一つの条件だけを評価する単独条件と，二つ以上の単独条件を and 又は or で組み合わせて評価する複数条件がある。単独条件と複数条件の例を次に示す。
</p></div>
<pre>
例
<span class="underline">( a > b )</span> and <span class="underline">( a &lt; c )</span>
<span class="underline"> 単独条件      単独条件</span>
        複数条件
</pre>
<div class="mag_lt10">　ここで，プログラムの実行時に，複数条件については短絡評価を行うものとする。短絡評価とは，複数条件を構成する単独条件を左から右へ向かって順に評価し，複数条件の結果が確定したら，残りの単独条件を評価しない方法である。例えば，二つの単独条件を and で組み合わせた複数条件の場合，一つ目の単独条件を評価した結果が偽ならば，複数条件は二つ目の単独条件に関係なく必ず偽になるので，二つ目の単独条件を評価しない。
</div>
<p><span class="bold">設問 1</span></p>
<div class="mag_lt10">　N 社が採用している分岐網羅の判定条件に関する次の記述中の<span class="blank"></span>に入れる正しい答えを，解答群の中から選べ。</p>
<p>図 1 はテスト対象のプログラムの例，表 1 はこのプログラムのテストケースの例である。 N 社が採用している分岐網羅の判定条件に従って，このテストケースを用いて，図 1 のプログラムをテストしたとき，テストケース (1) では<span class="blank">a</span>結果となり，テストケース (2) では<span class="blank">b</span>結果となる。
</div>
<figure>
<pre>
○プログラム (整数型 : x, 整数型 : a, 整数型 : b, 整数型 : c, 整数型 : d)
■ x > 10
| • func1()
| ▲ (a &lt; 10) or (b &lt; 20)
| | • func2()
| +---
| | • func3()
| ▼
| ▲ (c > 10) and (d > 10)
| | • func4()
| | • exit     /* 繰り返しを抜ける */
| +---
| | • func5()
| ▼
| • func6()
■
</pre><figcaption>図 1　テスト対象のプログラムの例</figcaption></figure>
<table class="mag_h30 responsive-width centered">
<caption>表 1 テストケースの例</caption>
<thead>
<tr>
<th>
<th colspan="5">テストデータ</th>
</th>
</thead>
<tbody>
<tr>
<th>変数</th>
<td>x</td>
<td>a</td>
<td>b</td>
<td>c</td>
<td>d</td>
</tr>
<tr>
<th>テストケース(1)</th>
<td>11</td>
<td>9</td>
<td>19</td>
<td>10</td>
<td>10</td>
</tr>
<tr>
<th>テストケース(2)</th>
<td>11</td>
<td>10</td>
<td>20</td>
<td>11</td>
<td>11</td>
</tr>
</tbody>
</table>
<p>a, bに関する解答群</p>
<p>ア　b &lt; 20 が評価されない<br />
イ　b &lt; 20 と c > 10 が評価されない<br />
ウ　b &lt; 20 と d > 10 が評価されない<br />
エ　c > 10 が評価されない<br />
オ　c > 10 と d > 10 が評価されない<br />
カ　d > 10 が評価されない<br />
キ　全ての単独条件が評価される
</p></div>
<p>問題の内容を説明しましょう。</p>
<p>説明文の中にある<span class="bold">「カバレッジ」とは、「カバー（ cover ）する」つまり「網羅する」</span>ということです。カバレッジの基準として、命令網羅と分岐網羅（判定条件網羅）があることを示してから、ここでは分岐網羅を採用するとしています。さらに、分岐の条件が「条件 A and 条件 B 」や「条件 C or 条件 D 」のように、複数の条件を and や or で組合せたものである場合には、「短絡評価」を行うとしています。</p>
<p>この問題のテーマは、<span class="u">「命令網羅や分岐網羅の違いがわかるか」ではなく、「短絡評価の意味がわかるか」</span>です。さすが午後問題だけあって、午前問題より深い内容になっています。</p>
<p>&nbsp;</p>
<p>短絡評価とは、</p>
<blockquote class="grey-text"><p>複数の条件を左から右に向かって順番に評価し、途中で結果が確定した場合には、残りの条件を評価しない</p></blockquote>
<p>ということです。これを英語でショートカット（ shortcut = 近道）と呼ぶのですが、「近道評価」では威厳がないので、「短絡評価」と訳したのでしょう。<span class="u">「評価」とは、条件が真か偽かをチェックすること</span>です。</p>
<p>&nbsp;</p>
<p>短絡評価では、たとえば、</p>
<dl class="background c-round">
<dt>「条件 A and 条件 B 」</dt>
<dd>条件 A が偽なら、その時点で「条件 A  and 条件 B 」が偽であることが確定するので、条件 B をチェックしません</dd>
<dt>「条件 C or 条件 D 」</dt>
<dd>条件 C が真なら、その時点で「条件 C  or 条件 D 」が真であることが確定するので、条件 D をチェックしません</dd>
</dl>
<p>残りの条件をチェックしないので、結果を得るために近道ができたことになるのです。</p>
<p>&nbsp;</p>
<p>それでは、設問 1 の空欄 a と空欄 b に答えを入れてみましょう（設問 2 と設問 3 は省略します）。</p>
<p>まず、空欄 a です。</p>
<p>テストケース (1) の</p>
<blockquote class="grey-text"><p>x = 11, a = 9, b = 19, c = 10, d = 10</p></blockquote>
<p>というテストデータを使うと、以下の網掛けした条件で結果が確定するので、 b &lt; 20 と d > 10 が評価されません。これが、短絡評価です。したがって、選択肢ウが正解です。</p>
<figure><figcaption>テストケース(1)「 x ＝ 11, a = 9, b = 19, c = 10, d = 10 」の場合</figcaption><pre>
○プログラム (整数型 : x, 整数型 : a, 整数型 : b, 整数型 : c, 整数型 : d)
■ x > 10
| • func1() <span class="pink-text text-accent-1">真</span>
| ▲ <span class="pink accent-1 black-text">(a &lt; 10)</span> or (b &lt; 20)
| | • func2()
| +---
| | • func3()
| ▼         <span class="pink-text text-accent-1">偽</span>
| ▲ <span class="pink accent-1 black-text">(c > 10)</span> and (d > 10)
| | • func4()
| | • exit     /* 繰り返しを抜ける */
| +---
| | • func5()
| ▼
| • func6()
■
</pre>
</figure>
<p>次に、空欄bです。</p>
<p>テストケース (2) の</p>
<blockquote class="grey-text"><p>x = 11, a = 10, b = 20, c = 11, d = 11</p></blockquote>
<p>というテストデータを使うと、以下の網掛けした条件で結果が確定します。このように、短絡評価であっても、すべての条件が評価される場合があります。したがって、選択肢キが正解です。</p>
<figure><figcaption>テストケース(2)「 x ＝ 11, a = 10, b = 20, c = 11, d = 11 」の場合</figcaption><pre>
○プログラム (整数型 : x, 整数型 : a, 整数型 : b, 整数型 : c, 整数型 : d)
■ x > 10
| • func1() <span class="pink-text text-accent-1">偽</span>         <span class="pink-text text-accent-1">偽</span>
| ▲ <span class="pink accent-1 black-text">(a &lt; 10)</span> or <span class="pink accent-1 black-text">(b &lt; 20)</span>
| | • func2()
| +---
| | • func3()
| ▼         <span class="pink-text text-accent-1">真</span>         <span class="pink-text text-accent-1">真</span>
| ▲ <span class="pink accent-1 black-text">(c > 10)</span> and <span class="pink accent-1 black-text">(d > 10)</span>
| | • func4()
| | • exit     /* 繰り返しを抜ける */
| +---
| | • func5()
| ▼
| • func6()
■
</pre>
</figure>
<p>&nbsp;</p>
<p><span class="chip mag_rt05">解答</span>設問 1　a &#8211; ウ, b &#8211; キ</p>
<div class="divider mag_h50"></div>
<p>いかがでしたか？</p>
<p>午前問題と午後問題のセットで、命令網羅と分岐網羅を深く理解できたでしょう。</p>
<p>この連載では、今後も、多くの受験者が苦手としている用語を取り上げて行きます。それでは、またお会いしましょう！</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/white_box_testing/">基本情報でわかる ホワイトボックステスト</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/mastering_tech/transaction/</link>
		<pubDate>Wed, 24 Feb 2021 04:40:44 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[データベース]]></category>
		<category><![CDATA[トランザクション]]></category>
		<category><![CDATA[午前問題と午後問題の違い]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=mastering_tech&#038;p=5157</guid>
		<description><![CDATA[<p>この連載では、基本情報技術者試験によく出題されるテクノロジー関連の用語を、午前問題と午後問題のセットを使って解説します。 午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/transaction/">基本情報でわかる トランザクション</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>午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸暗記では得られない明確さで、用語を理解できるようになります。</p>
<p>今回のテーマは、 <span class="bold">トランザクションにおける共有ロックと専有ロック</span> です。</p>
<style>dl.inline dd{margin-left:2em;}th{text-align:center;}</style>
<h2>トランザクションと共有ロック・専有ロックとは？</h2>
<p>データベースに対するひとまとまりの処理を <span class="bold">トラザクション</span> と呼びます。</p>
<p>多くの場合に、データベースは、複数のユーザーから利用されるサーバーになっているので、複数のトランザクションを同時に実行することがあります。もしも、同じデータを処理する複数のトランザクションを同時に実行するとどうなるでしょう。</p>
<p>あるトランザクションの処理が完了していない中途半端な状態のデータを、他のトランザクションが処理することになるので、データの内容に矛盾が生じてしまうかもしれません。そこで、データベースには、他のトランザクションに実行を待たせる機能が用意されていて、これを「ロック（ lock = 錠前）」と呼びます。</p>
<p>&nbsp;</p>
<p>ロックには、 <span class="bold">共有ロック</span> と <span class="bold">専有ロック</span> という種類があります。</p>
<ul class="background c-round">
<li>データを閲覧する（データの内容を変化させない）トランザクションは、共有ロックをかけてからデータを処理します。</li>
<li>データを更新する（データの内容を変化させる）トランザクションは、専有ロックをかけてからデータを処理します。</li>
</ul>
<p>あるトランザクションによって共有ロックがかけられたデータには、他のトランザクションが共有ロックをかけることができますが、専有ロックをかけることはできません。</p>
<p>これは、<span class="u">「誰かが見ているデータは、他の人が見ても構わないが、他の人が書き換えてはダメである」</span>ということです。複数のトランザクションにデータが共有されるので、共有ロックと呼ぶのです。</p>
<p>&nbsp;</p>
<p>あるトランザクションによって専有ロックがかけられたデータは、他のトランザクションが共有ロックをかけることも専有ロックをかけることもできません。</p>
<p>これは、<span class="u">「誰かが書き換え中のデータは、他の人が見ても書き換えてもダメである」</span>ということです。ひとつのトランザクションにデータが専有されるので、専有ロックと呼ぶのです。</p>
<h2>共有ロックと専有ロックに関する午前問題</h2>
<p>それでは、共有ロックと専有ロックに関する午前問題を解いてみましょう。以下に、問題を示します。</p>
<p>問題文の中にある「ロックの両立性」とは、「同時に両方のロックをかけられるかどうか」ということです。<br />
「ロックを獲得する」とは、「トラザクションが要求したロックが、データベースによって受け付けられる」ということです。<br />
「資源」とは、「処理の対象となるデータ」のことです。</p>
<div class="card-panel mag_h30">
問 29　平成 27 年度 秋期 午前</p>
<p>ロックの両立性に関する記述のうち，適切なものはどれか。</p>
<dl class="inline">
<dt>ア</dt>
<dd>トランザクション T<sub>1</sub> が共有ロックを獲得している資源に対して，トランザクション T<sub>2</sub> は共有ロックと専有ロックのどちらも獲得することができる。</dd>
<dt>イ</dt>
<dd>トランザクション T<sub>1</sub> が共有ロックを獲得している資源に対して，トランザクション T<sub>2</sub> は共有ロックを獲得することはできるが，専有ロックを獲得することはできない。</dd>
<dt>ウ</dt>
<dd>トランザクション T<sub>1</sub> が専有ロックを獲得している資源に対して，トランザクション T<sub>2</sub> は専有ロックと共有ロックのどちらも獲得することができる。</dd>
<dt>エ</dt>
<dd>トランザクション T<sub>1</sub> が専有ロックを獲得している資源に対して，トランザクション T<sub>2</sub> は専有ロックを獲得することはできるが、共有ロックを獲得することはできない。</dd>
</dl>
</div>
<p>トランザクション T<sub>1</sub> が共有ロックをかけている場合には、トランザクション T<sub>2</sub> は、共有ロックをかけられますが、専有ロックをかけられません。<br />
トランザクション T<sub>1</sub> が専有ロックをかけている場合は、トランザクション T<sub>2</sub> は、共有ロックも専有ロックもかけられません。</p>
<p>したがって、選択肢イが適切です。</p>
<p class="mag_tp20 mag_bt40"><span class="chip mag_rt05">解答</span>イ</p>
<h2>共有ロックと専有ロックに関する午後問題（ロックの必要性）</h2>
<p>今度は、共有ロックと専有ロックに関する午後問題です。以下に問題を示します。</p>
<p>この問題を通して、ロックの必要性や注意点を理解できます。設問ごとに区切って説明しましょう。なお、この問題では、「専有ロック」を「占有ロック」と表現しているので、これ以降では、「専有ロック」を「占有ロック」と呼びます。</p>
<div class="card-panel mag_h30">
問 3　平成 23 年度 特別 午後（一部抜粋）</p>
<p>　データベースのトランザクション管理に関する次の記述を読んで，設問 1 ～ 4 に答えよ。</p>
<div class="mag_lt10">　個人向けに，画材をインターネット販売する会社が運営する Web サイトがある。 この Web サイトが在庫管理に利用しているデータベースでは，絵の具の在庫数は色別に個々のデータとして管理されており，処理に応じて次の 3 種類のトランザクションが生成される。</p>
<dl class="inline">
<dt>(1)</dt>
<dd>1 回の商品注文に対して，一つの出荷トランザクションが生成される。</dd>
<dt>(2)</dt>
<dd>1 回の商品入荷に対して，一つの入荷トランザクションが生成される。</dd>
<dt>(3)</dt>
<dd>1 回の在庫照会に対して，一つの照会トランザクションが生成される。</dd>
</dl>
<p>　なお，一つのトランザクションで，複数の色の絵の具を処理することができる。
</p></div>
<p><span class="bold">設問 1</span></p>
<div class="mag_lt10">　ACID 特性に関する次の記述中<span class="blank"></span>に入れる正しい答えを，解答群の中から選べ。</p>
<p>　ACID 特性とは，データベースの一貫性を保証するために必要な特性で，原子性，一貫性，独立性，耐久性の四つがある。このうち，一貫性や独立性を保証するためにトランザクション管理では排他制御が必要となる。例えば，白絵の具の在庫数が 50 だった場合，表 1 に示すトランザクション T1 と T2 が同時に実行されたとき，排他制御を行わないと実行後の在庫数は 55 とならず，在庫数が<span class="blank">a</span>又は<span class="blank">b</span>となってしまう可能性がある。</p>
<p>　なお，各トランザクションは，図 1 の (1) ~ (3) の順で在庫数データを処理する。
</p></div>
<table class="mag_h30 responsive-width centered">
<caption>表 1 トランザクション T1，T2 の処理内容</caption>
<thead>
<tr>
<th>トランザクション</th>
<th>処理内容</th>
</thead>
<tbody>
<tr>
<td>出荷トランザクション T1</td>
<td>白絵の具 5 本の出荷</td>
</tr>
<tr>
<td>入荷トランザクション T2</td>
<td>白絵の具 10 本の入荷</td>
</tr>
</tbody>
</table>
<div class="row">
<div class="col m6 s12">
<ol class="background c-round">
トランザクション T1 の処理順序</p>
<li>白絵の具の在庫数データを読み込む。</li>
<li>白絵の具の在庫数データ = 白絵の具の在庫数データ &#8211; 5</li>
<li>白絵の具の在庫数データを書き込む。</li>
</ol>
</div>
<div class="col m6 s12">
<ol class="background c-round">
トランザクション T2 の処理順序</p>
<li>白絵の具の在庫数データを読み込む。</li>
<li>白絵の具の在庫数データ = 白絵の具の在庫数データ + 10</li>
<li>白絵の具の在庫数データを書き込む。</li>
</ol>
</div>
<p class="center grey-text">図 1 トランザクション T1, T2 の処理順序</p>
</div>
<p>解答群<br />
ア　40　　イ　45　　ウ　50　　<br class="hide-on-med-and-up">エ　60　　オ　65
</div>
<p>設問 1 は、「ロックが必要な理由を知っておきましょう」という問題です。</p>
<p>白絵の具の在庫数という同じデータを、トランザクション T1 とトランザクション T2 が同時に処理するとどうなるでしょう。</p>
<p>&nbsp;</p>
<p>もしも、トランザクション T1 の 3. の処理が行われる前に、トランザクション T2 の 1. の処理が行われたら、</p>
<ol class="background c-round">
<li>トランザクション T1 の 2. の処理（在庫数を &#8211; 5 する処理）が失われる</li>
<li>トランザクション T2 の 2. の処理（在庫数を + 10 する処理）だけが反映</li>
<li>在庫数は、もとの 50 を ＋ 10 した 60</li>
</ol>
<p>となります。</p>
<p>逆に、もしも、トランザクション T2 の 3. の処理が行われる前に、トランザクション T1 の 1. の処理が行われたら、</p>
<ol class="background c-round">
<li>トランザクション T2 の 2. の処理（在庫数を + 10 する処理）が失われる</li>
<li>トランザクション T1 の 2. の処理（在庫数を &#8211; 5 する処理）だけが反映</li>
<li>在庫数は、もとの 50 を &#8211; 5 した 45</li>
</ol>
<p>となります。</p>
<p>このような矛盾を生じさせないために、ロックが必要なのです。 45 または 60 になることがあるのですから、正解は選択肢イとエ（順不同）です。</p>
<h2>共有ロックと専有ロックに関する午後問題（ロックで生じる待ち状態）</h2>
<div class="card-panel mag_h30">
<span class="bold">設問 2</span></p>
<div class="mag_lt10">　入荷トランザクション及び出荷トランザクションを処理する場合は対象データを占有ロックし，照会トランザクションを処理する場合は共有ロックする。</p>
<p>　なお，このデータベースを管理する DBMS では，あるトランザクションが共有ロックしているデータを，ほかのトランザクションからロックする場合，共有ロックの要求は成功するが，占有ロックの要求は共有ロックが解除されるまで待ち状態となる。</p>
<p>　表 2 に示すトランザクション T3 〜 T6 を，図 2 に示すとおりに実行し，ロックを要求した場合，それぞれのトランザクションの状態について正しい説明を，解答群の中から選べ。
</p></div>
<table class="mag_h30 striped responsive-width centered">
<caption>表2 トランザクション T3 ~ T6 の処理内容</caption>
<thead>
<tr>
<th>トランザクション</th>
<th>処理内容</th>
</tr>
</thead>
<tbody>
<tr>
<td>照会トランザクション T3</td>
<td>白絵の具の在庫数照会</td>
</tr>
<tr>
<td>入荷トランザクション T4</td>
<td>白絵の具 10 本の入荷</td>
</tr>
<tr>
<td>出荷トランザクション T5</td>
<td>白絵の具 5 本の出荷</td>
</tr>
<tr>
<td>照会トランザクション T6</td>
<td>白絵の具の在庫数照会</td>
</tr>
</tbody>
</table>
<figure class="mag_h30">
<img class="materialboxed z-depth-5 responsive-width" data-caption="図2　トランザクションT3～T6の実行例" src="../../wp-content/uploads/2021/02/q3_h23h_figure.jpg" loading="lazy" width="763" height="332"><figcaption>図 2　トランザクション T3 ～ T6 の実行例</figcaption></figure>
<p>解答群</p>
<dl class="inline">
<dt>ア</dt>
<dd>T4， T5， T6 とも待ち状態となる。</dd>
<dt>イ</dt>
<dd>T5， T6 とも待ち状態とならない。</dd>
<dt>ウ</dt>
<dd>T4， T5 は待ち状態となるが， T6 は待ち状態とならない。 </dd>
<dt>エ</dt>
<dd>T4 は待ち状態となるが， T5， T6 は待ち状態とならない。 </dd>
<dt>オ</dt>
<dd>T6 は待ち状態となるが， T4， T5 は待ち状態とならない。</dd>
</dl>
</div>
<p>設問 2 は、「ロックをかけると、他のトランザクションが待ち状態になる場合があることを知っておきましょう」という問題です。</p>
<p><span class="u">待ち状態になるかどうかは、共有ロックと占有ロックのどちらをかけたかで異なります。</span></p>
<ul class="background c-round">
<li>あるトランザクションが共有ロックをかけた場合には、他のトランザクションは共有ロックをかけるなら待たされませんが、占有ロックをかけるなら待たされます</li>
<li>あるトランザクションが占有ロックをかけた場合には、他のトランザクションは共有ロックでも占有ロックでも待たされます</li>
</ul>
<p>トランザクション T3, T4, T5, T6 は、どれも白絵の具の在庫数という同じデータを処理します。</p>
<p>T3 と T6 は照会（見るだけ）なので共有ロックをかけます。<br />
T4 と T5 は入荷と出荷（どちらも更新）なので占有ロックをかけます。</p>
<p>したがって、待ち状態になるかどうかは、以下のようになります。</p>
<figure class="mag_h30">
<img class="materialboxed z-depth-5 responsive-width" src="../../wp-content/uploads/2021/02/comment_q3.gif" loading="lazy" width="763" height="332"><br />
</figure>
<p>T3 が共有ロックをかけた後なので、占有ロックの T4 と T5 は待ち状態になりますが、共有ロックの T6 は待ち状態になりません。したがって、選択肢ウが正解です。</p>
<h2>共有ロックと専有ロックに関する午後問題（ロックの注意点その 1 ～ 未解放）</h2>
<div class="card-panel mag_h30">
<span class="bold">設問 3</span></p>
<div class="mag_lt10">　出荷トランザクション T7 の処理内容を表 3 に示す。次の記述中の<span class="blank"></span>に入れる正しい答えを，解答群の中から選べ。 なお，トランザクション T7 は、図 3 の 1 ~ 4 の順で在庫数データを処理する。
</div>
<table class="mag_h30 responsive-width centered">
<caption>表 3 トランザクション T7 の処理内容</caption>
<thead>
<tr>
<th>トランザクション</th>
<th>処理内容</th>
</tr>
</thead>
<tbody>
<tr>
<td>出荷トランザクション T7</td>
<td>白絵の具 5 本と赤絵の具 3 本の出荷</td>
</tr>
</table>
<ol class="background c-round">
<span class="bold"><i class="material-icons">arrow_back</i>α</span></p>
<li>白絵の具の在庫数データをロックする。</li>
<li>白絵の具の在庫数データを読み込む。</li>
<p><span class="bold"><i class="material-icons">arrow_back</i>β</span></p>
<li>赤絵の具の在庫数データを読み込む。</li>
<p><span class="bold"><i class="material-icons">arrow_back</i>γ</span></p>
<li>白絵の具の在庫数データ = 白絵の具の在庫数データ &#8211; 5</li>
<li>白絵の具の在庫数データを書き込む。</li>
<p><span class="bold"><i class="material-icons">arrow_back</i>δ</span></p>
<li>赤絵の具の在庫数データ = 赤絵の具の在庫数データ &#8211; 3</li>
<li>赤絵の具の在庫数データを書き込む。</li>
<p><span class="bold"><i class="material-icons">arrow_back</i>ε</span></p>
<li>赤絵の具の在庫数データのロックを解除する。</li>
</ol>
<p class="grey-text center">図 3　ランザクション T7 の処理順序</p>
<div class="mag_lt10">
　データをロックしている時間を最も短くするためには， &#8220;赤絵の具の在庫数データをロックする。&#8221; を挿入すべき適切な位置は<span class="blank">c</span>で， &#8220;白絵の具の在庫数データのロックを解除する。&#8221; を挿入すべき適切な位置は<span class="blank">d</span>である。</p>
<p>　なお，ほかのトランザクションとのデッドロックの発生に対する考慮は不要とする。
</p></div>
<p>解答群</p>
<p>ア　α　　イ　β　　ウ　γ　　エ　δ　　オ　ε</dl>
</div>
<p>設問 3 は、<span class="bold">「ロックをかけると他のトランザクションが待たされる場合があるのだから、データの処理が完了したら、すぐにロックを解除しましょう」</span>という問題です。</p>
<p>赤絵の具の在庫データは、 3. で読み込んでいるので、その直前の β の位置でロックをかけるべきです。したがって、空欄 c の正解は、選択肢イです。</p>
<p>白絵の具の在庫データの処理は、 5. で完了しているので、その直後の δ の位置でロックを解除するべきです。したがって、空欄 d の正解は、選択肢エです。</p>
<h2>共有ロックと専有ロックに関する午後問題（ロックの注意点その 2 ～ デッドロック）</h2>
<div class="card-panel mag_h30">
<span class="bold">設問 4</span></p>
<div class="mag_lt10">　表4 に示すトランザクション T8 ～ T11 のうち，解答群の組合せの中から，同時に処理された場合にデッドロックが発生する可能性のある組合せを選べ。</p>
<p>　なお、トランザクション T8 〜 T11 では，各絵の具の在庫数データをどのような順番で処理するかは、分からないものとする。
</p></div>
<table class="striped mag_h30 responsive-width centered">
<caption>表 4　トランザクション T8 〜 T11 の処理内容</caption>
<thead>
<tr>
<th>トランザクション</th>
<th>処理内容</th>
</tr>
</thead>
<tbody>
<tr>
<td>出荷トランザクション T8</td>
<td>白絵の具 5 本と赤絵の具 5 本の出荷</td>
</tr>
<tr>
<td>入荷トランザクション T9</td>
<td>赤絵の具 10 本と絵の具 10 本の入荷</td>
</tr>
<tr>
<td>出荷トランザクション T10</td>
<td>青絵の具 2 本と白絵の具 5 本の出荷</td>
</tr>
<tr>
<td>入荷トランザクション T11</td>
<td>青絵の具 10 本と黒絵の具 10 本の入荷</td>
</tr>
<tbody>
</table>
<p>解答群</p>
<p>ア　T8, T9　　<br class="hide-on-med-and-up">イ　T8, T9, T10　　<br class="hide-on-med-and-up">ウ　T9, T10, T11<br />
エ　T10, T11
</div>
<p>設問 4 は、「ロックをかける順序によっては、<span class="bold">デッドロック</span>になってしまう場合があるので、注意しましょう」という問題です。デッドロックとは、複数のトランザクションが、すべて待ち状態になり、処理が先に進めなくなってしまうことです。</p>
<p>&nbsp;</p>
<p>ロックと待ち状態に注目して、選択肢を見てみましょう。以下は、選択肢アの T8 と T9 を同時に実行した例です。 T8 と T9 の両方が待ち状態になることはないので、デッドロックは発生しません。</p>
<ol class="background c-round">
<li>T8 が白絵の具をロックする</li>
<li>T9 が赤絵の具をロックする</li>
<li>T8 が赤絵の具をロックしようとするが、 2. でロックされているので、待ち状態になる</li>
<li>T9 が青絵の具をロックする</li>
<li>T9 が赤絵の具のロックを解除する</li>
<li>T8 が赤絵の具をロックする</li>
</ol>
<p>以下は、選択肢イの T8, T9, T10 を同時に実行した例です。T8、T9、T10 が、すべて待ち状態になり、処理が先に進めなくなっています。これが、デッドロックです。したがって、選択肢イが正解です。説明が長くなるので、選択肢ウとエの例は示しませんが、どちらもデッドロックは発生しません。</p>
<ol class="background c-round">
<li>T8 が白絵の具をロックする</li>
<li>T9 が赤絵の具をロックする</li>
<li>T10 が青絵の具をロックする</li>
<li>T8 が赤絵の具をロックしようとするが、 2. でロックされているので、待ち状態になる</li>
<li>T9 が青絵の具をロックしようとするが、 3. でロックされているので、待ち状態になる</li>
<li>T10 が白絵の具をロックしようとするが、 1. でロックされているので、待ち状態になる</li>
</ol>
<p>&nbsp;</p>
<p><span class="chip mag_rt05">解答</span>設問 1　a &#8211; イ, b &#8211; エ（順不同）　設問 2　ウ　設問 3　c &#8211; イ, d &#8211; エ　設問 4　イ</p>
<div class="divider mag_h50"></div>
<p>いかがでしたか？</p>
<p>午前問題で共有ロックと専有ロックという言葉の意味がわかり、午後問題でロックの必要性や注意点などを理解できたでしょう。</p>
<p>この連載では、今後も、多くの受験者が苦手としている用語を取り上げて行きます。それでは、またお会いしましょう！</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/transaction/">基本情報でわかる トランザクション</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/mastering_tech/compiler_optimization/</link>
		<pubDate>Mon, 15 Feb 2021 06:44:19 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[ソフトウェア]]></category>
		<category><![CDATA[午前問題と午後問題の違い]]></category>
		<category><![CDATA[情報落ち]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=mastering_tech&#038;p=5115</guid>
		<description><![CDATA[<p>この連載では、基本情報技術者試験によく出題されるテクノロジー関連の用語を、午前問題と午後問題のセットを使って解説します。 午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/compiler_optimization/">基本情報でわかる コンパイラ 最適化</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>午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸暗記では得られない明確さで、用語を理解できるようになります。</p>
<p>今回のテーマは、 <span class="bold">コンパイラの最適化</span> です。</p>
<style>pre{font-family:'consolas','Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;background:#292a33;color:#eceff1;font-size:1em;line-height:1.8;margin:1.5em auto;margin:1em -7.5%;padding:1em 7.5%}code{font-family:'consolas','Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;background:#292a33;color:#eceff1;font-size:1em;line-height:1.8;padding:.25em;margin:auto.5em;border-radius:.25em;}.commentout{color:#797c93;}dl.inline dd{margin-left:3.5em;}th{text-align:center;}</style>
<div class="pad_20 grey lighten-5 blue-grey-text hide-on-med-and-up c-round mag_h40 small-text">
<i class="material-icons light-blue-text mag_rt05">info</i>編集部注: スマートフォンでご覧の際は、アルゴリズムを横スクロールすると全文をご覧になれます
</div>
<h2>コンパイラの最適化とは？</h2>
<p>プログラムを実行する方式には、大きく分けて <span class="u">インタプリタ</span> と <span class="u">コンパイラ</span> があります。</p>
<p>インタプリタは、プログラムの内容を 1 行ずつマシン語（コンピュータが直接理解できる命令）に逐次変換しながら逐次実行します。</p>
<p>コンパイラは、プログラムのすべての内容をマシン語に一括変換してから一括実行します。</p>
<p>&nbsp;</p>
<p>インタプリタとコンパイラには、それぞれ長所と短所がありますが、今回のテーマである「最適化（ optimization ）」は、コンパイラの長所です。</p>
<p>最適化とは、プログラムをマシン語に一括変換するときに、プログラムの中にある無駄を排除することです。これによって、プログラムの実行速度を向上させたり、プログラムのサイズを小さくしたりできます。</p>
<p>&nbsp;</p>
<p>たとえば、図 1 に示した 3 行のプログラムがあるとしましょう。ここでは、基本情報技術者試験の擬似言語でプログラムを記述しています。<code>Print</code>は、引数の値を画面に表示する関数だとします。</p>
<figure class="mag_h30"><figcaption>図 1　無駄があるプログラムの例</figcaption><pre>
・A ← 123
・A ← 123
・Print(A)
</pre>
</figure>
<p>このプログラムでは、</p>
<pre>・A ← 123</pre>
<p>という同じ処理（変数 A に 123 という適当な値を代入する処理）が、わざとですが、 2 回記述されています。同じ処理を 2 回記述することは無駄なことなので、コンパイラは、プログラムの内容を図 2 であると解釈して、マシン語に変換します。 <code>・A ← 123</code>という処理を 1 回だけにしていることが最適化です。</p>
<figure class="mag_h30"><figcaption>図 2　無駄を排除したプログラムの例</figcaption><pre>
・A ← 123
・Print(A)
</pre>
</figure>
<p>さらに、コンパイラは、「このプログラムは、画面に 123 を表示できればよいのだから、変数 A を使うことは無駄である」と解釈して、図 3 に示したように最適化します。画面に 123 を表示する<code>・Print(123)</code>という処理だけになりました。</p>
<figure class="mag_h30"><figcaption>図 3　さらに無駄を排除したプログラムの例</figcaption><pre>
・Print(123)
</pre>
</figure>
<p>コンパイラに最適化ができるのは、プログラムのすべての内容を見てからマシン語に変換するからです。すべてを見れば、無駄があることがわかります。</p>
<p>それに対して、<span class="u">インタプリタには、最適化ができません。</span>なぜなら、プログラムの内容を 1 行ずつ見ているので、無駄があることがわからないからです。</p>
<p>たとえば、先ほど図 1 に示した 3 行のプログラムをインタプリタで実行すると、図 4 の (1), (2), (3) の順に、逐次変換されて、逐次実行されます。</p>
<figure class="mag_h30"><figcaption>図 4　無駄があるプログラムをインタプリタで実行した場合</figcaption><pre>
・A ← 123     <span class="commentout">・・・(1) この 1 行をマシン語に変換して実行する</span>
・A ← 123     <span class="commentout">・・・(2) この 1 行をマシン語に変換して実行する</span>
・Print(A)    <span class="commentout">・・・(3) この 1 行をマシン語に変換して実行する</span>
</pre>
</figure>
<h2>コンパイラの最適化 に関する午前問題</h2>
<p>コンパイラの最適化の意味がわかったところで、午前問題を解いてみましょう。以下に問題を示します。</p>
<p>選択肢の中にある「オブジェクトコード」とは、マシン語のことです。「ソースコード」とは、マシン語に変換される前のプログラムのことです。</p>
<div class="card-panel mag_h30">
問 19　平成 28 年度 春期 午前</p>
<p>コンパイラにおける最適化の説明として，適切なものはどれか。</p>
<dl class="inline">
<dt>ア</dt>
<dd>オブジェクトコードを生成する代わりに，インタプリタ用の中間コードを生成する。</dd>
<dt>イ</dt>
<dd>コンパイルを実施するコンピュータとは異なるアーキテクチャをもったコンピュータで動作するオブジェクトコードを生成する。</dd>
<dt>ウ</dt>
<dd>ソースコードを解析して，実行時の処理効率を高めたオブジェクトコードを生成する。</dd>
<dt>エ</dt>
<dd>プログラムの実行時に，呼び出されたサブプログラム名やある時点での変数の内容を表示するようなオブジェクトコードを生成する。</dd>
</dl>
</div>
<blockquote class="grey-text"><p>ソースコードを解析して、実行時の処理効率を高めたオブジェクトコートを生成する</p></blockquote>
<p>と説明している選択肢ウが正解です。</p>
<p>その他の選択肢が何の説明であるかは、気にしないでください。他のツールの説明の場合もありますが、まったくデタラメの場合もあるからです。</p>
<p class="mag_tp20 mag_bt40"><span class="chip mag_rt05">解答</span>ウ</p>
<h2>コンパイラの最適化に関する午後問題（最適化の具体例）</h2>
<p>以下は、コンパイラの最適化に関する午後問題を一部抜粋したものです。</p>
<p>他の記事でも書きましたが「基本情報技術者試験は、実によくできているなあ！」と思います。この問題の前半部では、コンパイラの最適化の様々な具体例を示しています。そして、後半部では、コンパイラの最適化の弊害を示しています。</p>
<p>つまり、<span class="u">コンパイラの最適化は、確かに便利ではあっても、いいことづくめではない、ということを示している</span>のです。この問題によって、コンパイラの最適化を深く理解できます。</p>
<div class="card-panel mag_h30">
問 2　平成 24 年度 春期 午後（一部抜粋）</p>
<p>　コンパイラの最適化に関する次の記述を読んで，設問 1 ～ 3 に答えよ。</p>
<div class="mag_lt10">　コンパイラとは，プログラム言語で記述された原始プログラムを翻訳して目的プログラムを生成するためのソフトウェアである。コンパイラの機能の一つに最適化がある。最適化では，原始プログラムを翻訳する過程で，プログラムの実行時間を短くするために原始プログラムの構造を変換する。最適化の方法の例を表 1 に示す。</div>
<table class="striped mag_h30">
<caption>表 1 最適化の方法の例</caption>
<thead>
<tr>
<th width="30%">最適化の方法</th>
<th width="70%">内容</th>
</tr>
</thead>
<tbody>
<tr>
<td>関数のインライン展開</td>
<td>関数を呼び出す箇所に，呼び出される関数のプログラムを展開する。</td>
</tr>
<tr>
<td>共通部分式の削除</td>
<td>同じ式が複数の箇所に存在し，それらの式で使用している変数の値が変更されず，式の値が変化しないとき，その式の値を作業用変数に格納する文を追加し，複数の同じ式をその作業用変数で置き換える。</td>
</tr>
<tr>
<td>定数の畳込み</td>
<td>プログラム中の定数同士の計算式を，その計算結果で置き換える。</td>
</tr>
<tr>
<td>定数伝播</td>
<td>変数を定数で置き換える。</td>
</tr>
<tr>
<td>無用命令の削除</td>
<td>プログラムの実行結果に影響しない文を削除する。</td>
</tr>
<tr>
<td>ループ内不変式の移動</td>
<td>ループ中で値の変化しない式があるとき，その式をループの外に移動する。</td>
</tr>
<tr>
<td>ループのアンローリング</td>
<td>ループ中の繰返しの処理を展開する。</td>
</tr>
</tbody>
</table>
<p>　擬似言語の形式で記述したプログラムの一部 (以下，プログラム 1 という) に対して，表 1 の最適化の方法を複数組み合わせて最適化した例を，表 2 に示す。</p>
<p>〔プログラム 1 〕</p>
<pre class="mag_w00">
■ i : 0, i ≦ 1, 1
| • x[i] ← y[i] + m + n
| • v[i] ← w[1] + m + n
■
</pre>
<table class="mag_h30 block responsive-width">
<caption>表 2 プログラム 1 の最適化の例</caption>
<thead>
<tr>
<th>最適化の方法</th>
<th>プログラム 1 の変換</th>
</tr>
</thead>
<tbody>
<tr>
<th>(1)</th>
<td>
<pre class="mag_w00">
■ i : 0, i ≦ 1, 1
| ･ t ← m + n
| ･ x[i] ← y[i] + t
| ･ v[i] ← w[i] + t
■
</pre>
</td>
</tr>
<tr>
<th>(2)</th>
<td>
<pre class="mag_w00">･ t ← m + n
■ i : 0, i ≦ 1, 1
| ･ x[1] ← y[1] + t
| ･ v[1] ← w[1] + t
■
</pre>
</td>
</tr>
<tr>
<th>(3)</th>
<td>
<pre class="mag_w00">･ t ← m + n
･ x[0] ← y[0] + t
･ v[0] ← w[0] + t
･ x[1] - y[1] + t
･ v[1] - w[1] + t
･ i ← 2
</pre>
</td>
</tr>
</tbody>
</table>
<dl class="inline">
<dt>設問 1</dt>
<dd>次の記述中の<span class="blank"></span>に入れる正しい答えを，解答群の中から選べ。</dd>
<dl>
<div class="mag_lt10 mag_h30">表 2 において，最適化の方法を (1)，(2)，(3) の順で適用するとき， (2) で適用される最適化の方法は<span class="blank">a</span>であり， (2) で適用される最適化の方法は<span class="blank">b</span>である。</div>
<p>a， b に関する解答群<br />
ア　関数のインライン展開　　<br class="hide-on-med-and-up">イ　共通部分式の削除<br />
ウ　定数の畳込み　　<br class="hide-on-med-and-up">エ　定数伝播<br />
オ　無用命令の削除　　<br class="hide-on-med-and-up">カ　ループ内不変式の移動<br />
キ　ループのアンローリング
</div>
<p>前半部の設問 1 を解いてみましょう。</p>
<p>表 1 に最適化の方法の具体例が示されていて、表 2 の (2) と (3) で適用されている方法が、どの方法に該当するかを答える問題です。せっかくなので、表 2 の (1) から説明しましょう。最適化は、(1) → (2) → (3) の順に進んで行くからです。</p>
<p>以下に、最適化する前のプログラムと、 (1) で最適化した後のプログラムを示します。</p>
<figure class="mag_h30"><figcaption>最適化する前のプログラム</figcaption><pre>
■ i : 0, i ≦ 1, 1
| • x[i] ← y[i] + m + n
| • v[i] ← w[1] + m + n
■
</pre>
</figure>
<figure class="mag_h30"><figcaption>(1) で最適化した後のプログラム</figcaption><pre>
■ i : 0, i ≦ 1, 1
| ･ t ← m + n
| ･ x[i] ← y[i] + t
| ･ v[i] ← w[i] + t
■
</pre>
</figure>
<p>繰り返し処理の中で、同じ<code>m + n</code>という加算が 2 回行われています。これは、無駄なことです。</p>
<p>そこで、<code>・t ← m + n</code>という処理を追加して加算結果を変数 t に代入し、これまでの<code>m + n</code>の部分を<code>t</code>に置き換えています。これによって、加算は 1 回だけになります。</p>
<p>これは、表 1 の中で</p>
<blockquote class="grey-text"><p>同じ式が複数の個所に存在し、それらの式で使用している変数の値が変更されず、式の値が変化しないとき、その式の値を作業用変数に格納する文を追加し、複数の同じ式をその作業用変数で置き換える</p></blockquote>
<p>に該当するので、「共通部分式の削除」です。ここでは、 t が作業用変数です。</p>
<p>&nbsp;</p>
<p>以下に、 (1) で最適化した後のプログラムと、 (2) で最適化した後のプログラムを示します。</p>
<figure class="mag_h30"><figcaption>(1) で最適化した後のプログラム</figcaption><pre>
■ i : 0, i ≦ 1, 1
| ･ t ← m + n
| ･ x[i] ← y[i] + t
| ･ v[i] ← w[i] + t
■
</pre>
</figure>
<figure class="mag_h30"><figcaption>(2) で最適化した後のプログラム</figcaption><pre>
･ t ← m + n
■ i : 0, i ≦ 1, 1
| ･ x[1] ← y[1] + t
| ･ v[1] ← w[1] + t
■
</pre>
</figure>
<p><code>・t ← m + n</code>において、 m + n の演算結果と、変数 t に代入される値は、繰り返し処理の中で、常に同じです。同じ演算と代入を繰り返すのは、無駄なことです。</p>
<p>そこで、<code>・t ← m + n</code>を繰り返しの外に出しています。</p>
<p>これは、表 1 の中で</p>
<blockquote class="grey-text"><p>ループ中で値の変化しない式があるとき、その式をループの外に移動する</p></blockquote>
<p>に該当するので、「ループ内不変式の移動」です。したがって、空欄 a の正解は、選択肢カです。ループ（ loop ）とは、「繰り返し」という意味です。</p>
<p>&nbsp;</p>
<p>以下に、 (2) で最適化した後のプログラムと、 (3) で最適化した後のプログラムを示します。</p>
<figure class="mag_h30"><figcaption>(2) で最適化した後のプログラム</figcaption><pre>
･ t ← m + n
■ i : 0, i ≦ 1, 1
| ･ x[1] ← y[1] + t
| ･ v[1] ← w[1] + t
■
</pre>
</figure>
<figure class="mag_h30"><figcaption>(3) で最適化した後のプログラム</figcaption><pre>･ t ← m + n
･ x[0] ← y[0] + t
･ v[0] ← w[0] + t
･ x[1] - y[1] + t
･ v[1] - w[1] + t
･ i ← 2
</pre>
</figure>
<p><code>■ i：0, i ≦ 1, 1</code>という構文を使った繰り返し処理は、 2 回の繰り返しを行います。たった 2 回の繰り返しのために、変数 i を 0 に初期化し、<code>i ≦ 1</code>というチェックと変数 i に 1 を加算する処理を毎回行うのは、無駄なことです。</p>
<p>そこで、<code>■ i：0, i ≦ 1, 1</code>という構文を使った繰り返しをやめて、 2 回の処理を、そのまま記述しています。プログラムが長くなりましたが、変数 i に関する処理がなくなったので、実行速度は速くなります。</p>
<p>これは、表 1 の中で</p>
<blockquote class="grey-text"><p>ループ中の繰り返しの処理を展開する</p></blockquote>
<p>に該当するので、「ループのアンローリング」です。したがって、空欄 b の正解は、選択肢キです。</p>
<h2>コンパイラの最適化に関する午後問題（最適化の弊害）</h2>
<p>設問 2 は省略して、後半部の設問 3 を解いてみましょう。</p>
<div class="card-panel mag_h30">
<dl class="inline">
<dt>設問 3</dt>
<dd>次の記述中の<span class="blank"></span>に入れる適切な答えを，解答群の中から選べ。</dd>
</dl>
<div class="mag_lt10 mag_h10">最適化をしないときと最適化をしたときとで浮動小数点数の演算の結果が異なる場合がある。プログラム 1 に対して表 2 の最適化をしなかったものと，最適化 をしたものとに， y[0] = 3307000000.0， y[1] = 305000000.0， m = -303000000.0， n = 4.0 を与えて実行した。その結果の x[0]， x[1] が次のとおりになった。ここで，同一優先順位の算術演算子は，左から順に演算する。</p>
<dl class="inline mag_lt10 mag_h10">
<dt>最適化をしないとき:</dt>
<dd style="margin-left:10em">x[0] = 4000004.0, x[1] = 2000004.0</dd>
<dt>最適化をしたとき:</dt>
<dd style="margin-left:10em">x[0] = 4000000.0, x[1] = 2000000.0</dd>
</dl>
<p>この実行結果が異なる原因としては，<span class="blank">d</span>の方法の適用によって演算順序が変化したことで，<span class="blank">e</span>が発生したからである。ここで，浮動小数点数の演算は単精度 (仮数部は 23 ビット) で計算しているものとする。
</div>
<p>d に関する解答群</p>
<p>ア　関数のインライン展開　　<br class="hide-on-med-and-up">イ　共通部分式の削除<br />
ウ　定数の畳込み　　<br class="hide-on-med-and-up">エ　定数伝播<br />
オ　無用命令の削除　　<br class="hide-on-med-and-up">カ　ループ内不変式の移動<br />
キ　ループのアンローリング</p>
<p>e に関する解答群</p>
<p>ア　桁あふれ　　イ　桁落ち　　<br class="hide-on-med-and-up">ウ　情報落ち　　エ　丸め誤差
</div>
<p>この設問の内容は、「最適化をしたら、浮動小数点数の演算の結果に誤差が生じてしまった」ということです。</p>
<p>最適化をしないときの　x[0] = 4000004.0 と x[1] = 2000004.0 は、正しい値です。</p>
<p>それに対して、最適化をしたときの x[0] = 4000000.0 と x[1] = 2000000.0 では、 4.0 の部分が失われて、誤差が生じています。</p>
<p>これは、浮動小数点数において、大きな値と小さな値を加算または減算すると、大きな値の指数に合わせて演算されるので、小さな値が 0 になってしまう（情報が消えてしまう）、という誤差であり、<span class="bold">情報落ち</span>と呼ばれます。</p>
<p>したがって、空欄 e の正解は、選択肢ウです。</p>
<p>&nbsp;</p>
<p>ここでは、 y[0] = 307000000.0, y[1] = 305000000.0, m = -303000000.0, n = 4.0 なので、 y[0], y[1], m が大きな値であり、 n が小さな値です。</p>
<p>問題文に</p>
<blockquote class="grey-text"><p>同一優先順位の算術演算子は、左から順に演算する</p></blockquote>
<p>とあるので、最適化をしたことによって、演算の順序が変わってしまい、大きな値と小さな値の加算または減算が生じたのです。</p>
<p>&nbsp;</p>
<p>以下は、最適化する前のプログラム（最適化をしないときのプログラム）です。</p>
<figure class="mag_h30"><figcaption>最適化する前のプログラム</figcaption><pre>
■ i : 0, i ≦ 1, 1
| • x[i] ← y[i] + m + n
| • v[i] ← w[1] + m + n
■
</pre>
</figure>
<p><code>・x[i] ← y[i] + m + n</code>という演算では、まず、 y[i] と m という大きな値どうしの加算が行われ、その結果として小さな値が得られます。</p>
<p>次に、その小さな値と n という小さな値どうしの加算が行われます。これなら、情報落ちは生じません。これは、<code>・v[i] ← w[i] + m + n</code>の部分でも同様です。</p>
<p>&nbsp;</p>
<p>以下は、 (1) で最適化した後のプログラムです。</p>
<figure class="mag_h30"><figcaption>(1) で最適化した後のプログラム</figcaption><pre>
■ i : 0, i ≦ 1, 1
| ･ t ← m + n
| ･ x[i] ← y[i] + t
| ･ v[i] ← w[i] + t
■
</pre>
</figure>
<p>問題の前半部で説明した「共通部分式の削除」という方法で、<code>・t ← m + n</code>という処理を行っています。</p>
<p>これは、 m という大きな値と、 n という小さな値の加算なので、情報落ちが生じる場合があります。</p>
<p>したがって、空欄 d の正解は、選択肢イです。</p>
<div class="grey lighten-5 mag_h30 pad_20 c-round">
<i class="material-icons light-blue-text">search</i><span class="blue-grey-text mag_w10">タグで関連記事をチェック</span><a href="../../tag/情報落ち/" class="tag">情報落ち</a>
</div>
<p>&nbsp;</p>
<p><span class="chip mag_rt05">解答</span>設問 1　a &#8211; カ, b &#8211; キ　設問 3　d &#8211; イ, e &#8211; ウ</p>
<div class="divider mag_h50"></div>
<p>いかがでしたか？</p>
<p>午前問題と午後問題のセットで、コンパイラの最適化を、しっかりと理解できたでしょう。</p>
<p>この連載では、今後も、多くの受験者が苦手としている用語を取り上げて行きます。それでは、またお会いしましょう！</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/compiler_optimization/">基本情報でわかる コンパイラ 最適化</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>基本情報でわかる CRC 「具体例を見て体験すれば仕組みがわかる」</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/crc/</link>
		<pubDate>Mon, 25 Jan 2021 04:15:37 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[ネットワーク]]></category>
		<category><![CDATA[午前問題と午後問題の違い]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=mastering_tech&#038;p=5073</guid>
		<description><![CDATA[<p>この連載では、基本情報技術者試験によく出題されるテクノロジー関連の用語を、午前問題と午後問題のセットを使って解説します。 午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/crc/">基本情報でわかる CRC 「具体例を見て体験すれば仕組みがわかる」</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>午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸暗記では得られない明確さで、用語を理解できるようになります。</p>
<p>今回のテーマは、 <span class="bold">CRC （巡回冗長検査）</span> です。</p>
<style>pre{font-family:'consolas','Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;background:#263238;color:#eceff1;font-size:1em;line-height:1.8;margin:1.5em auto;margin:1em -7.5%;padding:1em 7.5%}.background pre{margin:1em -2em}dl.inline dd{margin-left:2em;}</style>
<h2>CRC に関する午前問題 ～ CRC とは</h2>
<p>いきなりですが、以下をご覧ください。これは、データの誤り検査方式に関する問題です。選択肢に並んでいる用語は、どれも誤り検査方式の名称です。</p>
<p>今回のテーマは、「 CRC （ Cyclic Redundancy Check 、巡回冗長検査）」ですから、当然、この問題の正解は、選択肢アの「 CRC 方式」です。</p>
<div class="card-panel mag_h30">
問 4　平成 22 年度 秋期 午前</p>
<p>送信側では，ビット列をある生成多項式で割った余りをそのビット列に付加して送信し，受信側では，受信したビット列が同じ生成多項式で割り切れるか否かで誤りの発生を判断する誤り検査方式はどれか。</p>
<p>ア　CRC 方式　　<br class="hide-on-med-and-up">イ　垂直パリティチェック方式<br />
ウ　水平パリティチェック方式　　<br class="hide-on-med-and-up">エ　ハミング符号方式
</div>
<p>それでは、どのようにして CRC を覚えればよいでしょうか。</p>
<p>問題文にあるように、 CRC の仕組みは、</p>
<blockquote class="mag_h30">
<p class="blue-grey-text">「送信側では、ビット列をある生成多項式で割った余りを、そのビット列に付加する」</p>
<p class="blue-grey-text">「受信側では、受信したビット列が同じ生成多項式で割り切れるか否かで誤りの発生を判断する」</p>
</blockquote>
<p>というものです。 <span class="u">しかし、まったくイメージがつかめないでしょう。</span>何か、わかりやすい具体例がほしいところです。</p>
<p class="mag_tp20 mag_bt40"><span class="chip mag_rt05">解答</span>ア</p>
<h2>CRC に関する午後問題</h2>
<p>「基本情報技術者試験は、実によくできているなあ！」と思います。先ほどの午前問題と同じ平成 22 年度 秋期の午後問題に、 CRC の具体例を示した問題があるからです。</p>
<p>以下に問題の一部（ CRC の具体例に関する部分）を抜粋したもの示します。</p>
<dl class="background c-round">
<dt>設問 2</dt>
<dd>午前問題の「送信側では、ビット列をある生成多項式で割った余りを、そのビット列に付加する」の具体例</dd>
<dt>設問 3</dt>
<dd>午前問題の「受信側では、受信したビット列が同じ生成多項式で割り切れるか否かで誤りの発生を判断する」の具体例</dd>
</dl>
<p>後で内容を詳しく説明しますので、ざっと目を通してください。設問 1 は、省略しています。</p>
<div class="card-panel mag_h30">
問 3　平成 22 年度 秋期 午後（一部抜粋）</p>
<p>CRC (巡回冗長検査) に関する次の記述を読んで，設問 1 ~ 3 に答えよ。</p>
<p>CRC は，誤り検出方式の一つである。送信側でデータに誤り検出符号 (以下，符号という) を付加して送信し，受信側で検査することによって，転送の際の誤りの有無を判断する。</p>
<p>&nbsp;</p>
<p><span class="bold">設問 2</span>　次の記述中の<span class="blank"></span>に 入れる正しい答えを，解答群の中から選べ。</p>
<div class="mag_lt10">
任意の長さのビット列の符号を求める計算手順を次に示す。ここで，符号の長さは n ビットとする。</p>
<p>〔 n ビットの符号を求める計算手順〕</p>
<dl class="inline">
<dt>(1)</dt>
<dd>左端及び右端のビットが 1 である ( n + 1) ビットのビットパターン (以下，マスクという) を定める。</dd>
<dt>(2)</dt>
<dd>符号計算対象のビット列の右端に n ビットの 0 を付加したビット列を作る。</dd>
<dt>(3)</dt>
<dd>(2) で作ったビット列に対して次の操作を行う。</p>
<ol class="pad_lt05">
<li>ビット列の左端から調べ，最初に値が 1 であるビットの位置 p を見つける。</li>
<li>p を左端とし p + n を右端とする部分ビット列に対し，マスクで排他的論理和 (XOR) を取る。</li>
<li>ビット列の右端 n ビット以外がすべて 0 になるまで， 1. 及び 2. を繰り返す。</li>
</ol>
</dd>
<dt>(4)</dt>
<dd>(3)の操作で得られたビット列の右端 n ビットが符号となる。</dd>
<dd>図に， マスクが 101 のときの符号( 2 ビット)を計算する例を示す。</p>
<figure class="mag_h30">
<img class="materialboxed z-depth-5 responsive-width" src="../../wp-content/uploads/2021/01/q3_h22a_pm_figure.jpg" loading="lazy"><figcaption>図　マスクが101のときの符号（2ビット）を計算する例</figcaption></figure>
</dd>
<dd>マスクは 101 で計算した，符号計算対象のビット列 0010 0110 の 2 ビットの符号は<span class="blank"></span>である。</dd>
</dl>
</div>
<p>解答群<br />
ア　00　　イ　01　　ウ　10　　エ　11
</p></div>
<p>設問 2 は、 CRC の検査符号を求める手順と具体例が示され、同じ手順を使って、マスクが 101 のときの 00100110 に対する検査符号を求めよ、という内容です。</p>
<p>「ビット列を生成多項式で割った余り」が検査符号になるのですが、これは「生成多項式で割る」というよりは「生成多項式で得られた値で割る」と考えた方がわかりやすいでしょう。生成多項式とは、値を得るためのルールのことです。</p>
<p>ここでは、手順の (1) に示された「左端及び右端のビットが 1 である ( + 1) ビットのビットパターン」が生成多項式で得られた値です。そして、割り算の余りとは、通常の割り算ではなく、手順の (3) に示された 1 の位置を合わせて XOR 演算を繰り返し、その結果として得られた右端の n ビットのことなのです。</p>
<p>&nbsp;</p>
<p>「え～っ、よくわかんな～い？」だと思いますので、設問 2 を解いて</p>
<blockquote>
<p class="blue-grey-text">「送信側では、ビット列をある生成多項式で割った余りを、そのビット列に付加する」</p>
</blockquote>
<p>を体験してみましょう。</p>
<p>ここでは、マスク 101 （この問題では、生成多項式で得られた値をマスクと呼んでいます。）とビット列 00100110 で検査符号を求めます。 ( n + 1 )ビットのマスクが 101 という 3 ビットなのですから、検査符号は、 n  =  2 ビットです。</p>
<ol class="background c-round">
<li>まず、ビット列 00100110 の右端に n = 2 ビットの 0 を付加して、ビット列を 00100110<span class="light-blue-text">00</span> にします。</li>
<li>次に、ビット列 00100110<span class="light-blue-text">00</span> の左端の 1 の位置にマスクの 101 の左端の 1 を合わせて XOR 演算を行います。
<pre>
    00100110<span class="light-blue-text">00</span>
XOR   101
---------------
    00001110<span class="light-blue-text">00</span>
</pre>
</li>
<li>これ以降は、同じ手順を、ビット列の右端の n = 2 ビット以外がすべて0になるまで繰り返します。
<pre>
    00001110<span class="light-blue-text">00</span>
XOR     101
---------------
    00000100<span class="light-blue-text">00</span>

    00000100<span class="light-blue-text">00</span>
XOR      101
---------------
    00000001<span class="light-blue-text">00</span>

    00000001<span class="light-blue-text">00</span>
XOR        101
---------------
    00000000<span class="light-blue-text">01</span> ・・・ビット列の右端の n = 2 ビット以外がすべて 0 になりました。
</pre>
</li>
<li>00000000<span class="light-blue-text">01</span>というビット列の右端の n = 2 ビットの <span class="light-blue-text">01</span> が検査符号です。</li>
</ol>
<p>以上のことから、選択肢イが正解です。</p>
<p>ビット列の左端の 1 の位置にマスクの左端の 1 を合わせて XOR 演算を行うと、 1 XOR 1 は 0 なので、その位置を 0 にできます。これをビット列の右端の n = 2 ビット以外がすべて 0 になるまで繰り返して、右端の n = 2 ビットに得られた値が「ビット列を生成多項式で割った余り」なのです。</p>
<p>&nbsp;</p>
<p>今度は、設問 3 を解いて、</p>
<blockquote>
<p class="blue-grey-text">「受信側では、受信したビット列が同じ生成多項式で割り切れるか否かで誤りの発生を判断する」</p>
</blockquote>
<p>の意味を確認してみましょう。</p>
<div class="card-panel mag_h30">
設問 3　次の記述中の<span class="blank"></span>に入れる正しい答えを，解答群の中から選べ。</p>
<div class="mag_lt10">
誤りの有無の検査は，次の手順で行う。</p>
<p>〔誤りの有無の検査手順〕</p>
<dl class="inline">
<dt>(1)</dt>
<dd>受信したビット列に対して，送信側で符号の計算に利用したものと同じマスクを使い，〔 n ビットの符号を求める計算手順〕 の (3) と同じ処理を行う。</dd>
<dt>(2)</p>
<dt>
<dd>右端 n ビットの値によって，誤りの有無を判断する。</dd>
</dl>
<p>　受信したビット列(符号が付加されたビット列)を誤りの有無の検査手順に従って検査すると，誤りがなければ最後に残った右端 n ビットの値は<span class="blank">a</span>になる。このことは次の手順で説明できる。</p>
<p>〔手順〕</p>
<dl class="inline">
<dt>(1)</dt>
<dd>符号計算対象のビット列を一つの数値 <span class="italic">D</span> と見ると，符号 <span class="italic">C</span> は次の式で表せる。</dd>
<dd class="mag_lt20 mag_h20">式<i class="material-icons">looks_one</i> (<span class="italic">D</span> × 2<sup>n</sup>)<i class="material-icons mag_w05">control_point</i>d<sub>1</sub><i class="material-icons mag_w05">control_point</i>d<sub>2</sub><i class="material-icons mag_w05">control_point</i>…<i class="material-icons mag_w05">control_point</i>d<sub>m</sub> = <span class="italic">C</span></dd>
<dd>　ここで，<i class="material-icons mag_w05">control_point</i>は XOR を表し，m は XOR の繰返し回数とする。d<sub>i</sub>(1 ≦ i ≦ m) はマスクに対応するビット列である。図の例では， d<sub>1</sub> = 0101000000， d<sub>2</sub> = 0001010000， d<sub>3</sub> = 0000001010 である。</dd>
<dt>(2)</p>
<dt>
<dd>〔誤りの有無の検査手順〕で得られた結果の右端 n ビットの値 T は，次の式で表せる。</dd>
<dd class="mag_lt20 mag_h20">式<i class="material-icons">looks_two</i> (<span class="italic">D</span> × 2<sup>n</sup>)<i class="material-icons mag_w05">control_point</i><span class="italic">C</span><i class="material-icons mag_w05">control_point</i>d<sub>1</sub><i class="material-icons mag_w05">control_point</i>d<sub>2</sub><i class="material-icons mag_w05">control_point</i>…<i class="material-icons mag_w05">control_point</i>d<sub>m</sub> = <span class="italic">T</span></dd>
<dt>(3)</dt>
<dd> 式<i class="material-icons">looks_two</i>を変形すると次の式となる。</p>
<dd class="mag_lt20 mag_h20">式<i class="material-icons">looks_3</i> (<span class="italic">D</span> × 2<sup>n</sup>)<i class="material-icons mag_w05">control_point</i>d<sub>1</sub><i class="material-icons mag_w05">control_point</i>d<sub>2</sub><i class="material-icons mag_w05">control_point</i>…<i class="material-icons mag_w05">control_point</i>d<sub>m</sub><i class="material-icons mag_w05">control_point</i><span class="italic">C</span> = <span class="italic">T</span></dd>
<dt>(4)</dt>
<dd>式<i class="material-icons">looks_one</i>と式<i class="material-icons">looks_3</i>によって，</p>
<dd class="mag_lt10"><span class="blank">b</span>= <span class="italic">T</span></dd>
<dd>となる。</dd>
</dl>
<p>　マスク 101 で計算した符号を右端に付加したビット列 1001001101 を受信した。 このビット列には<span class="blank">c</span>。
</div>
<p>a に関する解答群</p>
<p>ア　すべてのビットが 0　　<br class="hide-on-med-and-up">イ　すべてのビットが 1<br />
ウ　符号と同じ　　<br class="hide-on-med-and-up">エ　符号の各ビットを反転させたものと同じ</p>
<p>b に関する解答群</p>
<p>ア　2<sup>n</sup> &#8211; 1　　<br class="hide-on-med-and-up">イ　<span class="italic">C</span>　　<br class="hide-on-med-and-up">ウ　<span class="italic">C</span><i class="material-icons mag_w05">control_point</i> (2<sup>n</sup> &#8211; 1)　　<br class="hide-on-med-and-up">エ　<span class="italic">C</span><i class="material-icons mag_w05">control_point</i><span class="italic">C</span></p>
<p>c　に関する解答</p>
<p>ア　誤りが含まれる　　<br class="hide-on-med-and-up">イ　誤りは含まれない<br />
ウ　誤りが含まれるか否かは判断できない
</div>
<p>ここでも、設問 2 と同様に、「左端及び右端のビットが 1 である ( + 1) ビットのビットパターン」が生成多項式で得られた値であり、割り算の余りとは、 1 の位置を合わせて XOR 演算を繰り返し、その結果として得られた右端の n ビットのことです。</p>
<p>「割り切れる」とは、「割り算の余りがゼロになる」ことなので、検査符号を生成したときと同じ XOR 演算を繰り返して、右端の n ビットがゼロになったら誤りがないと判断できます。</p>
<p>したがって、空欄 a の正解は、選択肢アです。</p>
<p>&nbsp;</p>
<p>空欄 b は、右端の n ビットがゼロになったら誤りがないと判断できる理由を示しています。</p>
<p>式<i class="material-icons">looks_two</i>は、 XOR 演算を繰り返して、 n ビットの検査符号 <span class="italic">C</span> が得られるという意味です。ここでは、検査符号を作成しています。</p>
<blockquote class="blue-grey-text"><p>式<i class="material-icons">looks_one</i> (<span class="italic">D</span> × 2<sup>n</sup>)<i class="material-icons mag_w05">control_point</i>d<sub>1</sub><i class="material-icons mag_w05">control_point</i>d<sub>2</sub><i class="material-icons mag_w05">control_point</i>…<i class="material-icons mag_w05">control_point</i>d<sub>m</sub> = <span class="italic">C</span></p></blockquote>
<p>式<i class="material-icons">looks_two</i> は、検査符号付きのビット列に同じ XOR 演算を繰り返して得られた右端の n ビットを <span class="italic">T</span> としています。ここでは、検査符号を使った誤りの検出を行っています。</p>
<blockquote class="blue-grey-text"><p>式<i class="material-icons">looks_two</i> (<span class="italic">D</span> × 2<sup>n</sup>)<i class="material-icons mag_w05">control_point</i><span class="italic">C</span><i class="material-icons mag_w05">control_point</i>d<sub>1</sub><i class="material-icons mag_w05">control_point</i>d<sub>2</sub><i class="material-icons mag_w05">control_point</i>…<i class="material-icons mag_w05">control_point</i>d<sub>m</sub> = <span class="italic">T</span></p></blockquote>
<p>式<i class="material-icons">looks_3</i> は、式<i class="material-icons">looks_two</i>を変形したものです。</p>
<blockquote class="blue-grey-text"><p>式<i class="material-icons">looks_3</i> <span style="border:#f44336 .2em solid;padding:.2em;">(<span class="italic">D</span> × 2<sup>n</sup>)<i class="material-icons mag_w05">control_point</i>d<sub>1</sub><i class="material-icons mag_w05">control_point</i>d<sub>2</sub><i class="material-icons mag_w05">control_point</i>…<i class="material-icons mag_w05">control_point</i>d<sub>m</sub></span><i class="material-icons mag_w05">control_point</i><span class="italic">C</span> = <span class="italic">T</span></p></blockquote>
<p>式<i class="material-icons">looks_3</i> において赤枠で囲んだ部分は、式<i class="material-icons">looks_two</i> の左辺と同じなので、この部分を <span class="italic">C</span> と置き換えることができます。</p>
<p>したがて、空欄 b の正解は、選択肢エです。</p>
<blockquote class="blue-grey-text"><p><span class="italic">C</span><i class="material-icons mag_w05">control_point</i><span class="italic">C</span></p></blockquote>
<p>問題では、この後の説明が省略されていますが、同じ <span class="italic">C</span> と <span class="italic">C</span> という値で XOR 演算を行うと結果はゼロになります。</p>
<p>したがって、 0 = <span class="italic">T</span> になったら、つまり、検査符号を生成したときと同じ XOR 演算を繰り返して、右端の n ビット（ここでは <span class="italic">T</span> ）がゼロになったら、誤りがないと判断できるのです。</p>
<p>&nbsp;</p>
<p>空欄 c は、マスク 101 で検査符号を付加したビット列 1001001101 に誤りがあるかどうかチェックしてみよう、という内容です。</p>
<p>以下のように、検査符号を生成したときと同じ XOR 演算を繰り返して右端の n = 2 ビットを求めると 01 になるので（ゼロではないので）、誤りが含まれていると判断できます。したがって、空欄 c の正解は、選択肢アです。</p>
<pre>
    10010011<span class="light-blue-text">01</span>
XOR 101
---------------
    00110011<span class="light-blue-text">01</span>

    00110011<span class="light-blue-text">01</span>
XOR   101
---------------
    00011011<span class="light-blue-text">01</span>

    00011011<span class="light-blue-text">01</span>
XOR    101
---------------
    00001111<span class="light-blue-text">01</span>

    00001111<span class="light-blue-text">01</span>
XOR     101
---------------
    00000101<span class="light-blue-text">01</span>

    00000101<span class="light-blue-text">01</span>
XOR      101
---------------
    00000000<span class="light-blue-text">01</span> ・・・ビット列の右端の n = 2 ビット以外がすべて 0 になりました。
</pre>
<p>&nbsp;</p>
<p><span class="chip mag_rt05">解答</span>設問 2　イ　設問 3　a &#8211; ア, b &#8211; エ, c &#8211; ア</p>
<div class="divider mag_h50"></div>
<p>いかがでしたか？</p>
<p>具体例を見て実際に体験したことで、 CRC の仕組みをしっかりと理解できたでしょう。</p>
<p>この連載では、今後も、多くの受験者が苦手としている用語を取り上げて行きます。それでは、またお会いしましょう！</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/crc/">基本情報でわかる CRC 「具体例を見て体験すれば仕組みがわかる」</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>基本情報でわかる 浮動小数点 「3つの情報で1つの数を表す仕組みを知れば、浮動小数点数がわかる」</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/float/</link>
		<pubDate>Tue, 12 Jan 2021 06:03:48 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[2進数]]></category>
		<category><![CDATA[ハードウェア]]></category>
		<category><![CDATA[午前問題と午後問題の違い]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=mastering_tech&#038;p=5037</guid>
		<description><![CDATA[<p>この連載では、基本情報技術者試験によく出題されるテクノロジー関連の用語を、午前問題と午後問題のセットを使って解説します。 午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/float/">基本情報でわかる 浮動小数点 「3つの情報で1つの数を表す仕組みを知れば、浮動小数点数がわかる」</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>午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸暗記では得られない明確さで、用語を理解できるようになります。</p>
<p>今回のテーマは、 <span class="bold">浮動小数点数</span> です。</p>
<style>dl.inline > dd{margin-left:2em;}dl.block > dt{float:none;}figure{position:relative;margin:1.5em 0}figcaption{margin:1em 0;color:#9e9e9e;text-align:center;}blockquote{color:#607d8b}@media screen and (min-width:601px){.responsive-width{width:90%}}</style>
<h2>浮動小数点数 / 浮動小数点 とは</h2>
<p>たとえば、 10 進数の -3.5 を 2 進数で表すと、どうなるでしょう。 -11.1<sub>(2)</sub> です（ <sub>(2)</sub> は 2 進数であることを示します）。</p>
<p>ただし、コンピュータの内部で、 -11.1<sub>(2)</sub> という表現を、そのまま使うことはできません。なぜなら、コンピュータの内部では、電圧の高低を 1 と 0 に置き換えた 2 進数が使われているからです。 <span class="u">1 と 0 しかないので、マイナス符号（ &#8211; ）や、小数点を示すドット（ . ）を表現できません。</span></p>
<p>&nbsp;</p>
<p>今回のテーマである <span class="bold">浮動小数点数は、 1 と 0 だけでマイナス符号や小数点がある数を表現する方法</span>です。いったい、どのような仕組みになっているのでしょうか？</p>
<p>&nbsp;</p>
<p>1 つの数を <span class="bold">符号部</span> <span class="bold">指数部</span> <span class="bold">仮数部</span> という 3 つの情報に分けて示すのです。これらは、どれも 1 と 0 だけの情報です。</p>
<p>符号部は、プラスなら 0 で、マイナスなら 1 で表します。 -11.1<sub>(2)</sub> の符号はマイナスなので、符号部は 1 です。</p>
<p>11.1<sub>(2)</sub> の部分は、小数点位置をずらして</p>
<div class="background c-round">
11.1<sub>(2)</sub> = 0.111<sub>(2)</sub> × 2<sup>2</sup>
</div>
<p>と変形して、 2 = 10<sub>(2)</sub> を指数部、 111<sub>(2)</sub> を仮数部とします。これで、 -11.1<sub>(2)</sub> を 1 と 0 だけで表せました。</p>
<ul class="background c-round">
<li>符号部が 1<sub>(2)</sub></li>
<li>指数部が 10<sub>(2)</sub></li>
<li>仮数部が 111<sub>(2)</sub></li>
</ul>
<p><span class="u">11.1<sub>(2)</sub> = 0.111<sub>(2)</sub> × 2<sup>2</sup> と変形したのは、数の途中に小数点が入らないようにするため</span>です。そのためには、 <span class="u">小数点位置をフワフワとずらすことになるので、「浮動小数点」と呼ぶ</span>のです。</p>
<p>仮数部の 111<sub>(2)</sub> は、実際には、先頭に 0. がありますが、 0. を省略しています。小数点位置をずらしたので、元の値と同じにするために、指数部が必要になります。</p>
<p>0.111<sub>(2)</sub> × 2<sup>2</sup> の × 2 の部分も基数という情報ですが、 2 進数の基数は 2 に決まっているので、「基数部」という情報を持つ必要はありません。</p>
<h2>浮動小数点数 に関する午前問題</h2>
<p>それでは、浮動小数点数に関する午前問題を見てみましょう。</p>
<p>以下は、実数（小数点のある数） <span class="italic">a</span> を <span class="italic">a = f × r<sup>e</supa></span> という浮動小数点数で表現したときに、 <span class="italic">f</span>, <span class="italic">e</span>, <span class="italic">r</span> を何と呼ぶかという問題です（超カンタンですね！）。</p>
<div class="card-panel mag_h30">
問 2　(平成 21 年度 秋期)</p>
<p>実数 <span class="italic">a</span> を <span class="italic">a = f × r<sup>e</sup></span> と表す浮動小数点表示に関する記述として，適切なものはどれか。</p>
<dl class="inline">
<dt>ア</dt>
<dd><span class="italic">f</span> を仮数， <span class="italic">e</span> を指数， <span class="italic">r</span> を基数という。</dd>
<dt>イ</dt>
<dd><span class="italic">f</span> を基数， <span class="italic">e</span> を仮数， <span class="italic">r</span> を指数という。</dd>
<dt>ウ</dt>
<dd><span class="italic">f</span> を基数， <span class="italic">e</span> を指数， <span class="italic">r</span> を仮数という。</dd>
<dt>エ</dt>
<dd><span class="italic">f</span> を指数， <span class="italic">e</span> を基数， <span class="italic">r</span> を仮数という。</dd>
</dl>
</div>
<p>これまでに示した 11.1<sub>(2)</sub> = 0.111<sub>(2)</sub> × 2<sup>2</sup> という例に当てはめると、</p>
<p><span class="italic">f</span> が仮数部、<br />
<span class="italic">e</span> が指数部、<br />
<span class="italic">r</span> が基数部</p>
<p>です。したがって、選択肢アが正解です。この問題には、符号部が登場しません。符号部は、変数で表現できないからでしょう（たぶん）。</p>
<p class="mag_tp20 mag_bt40"><span class="chip mag_rt05">解答</span>ア</p>
<h2>浮動小数点数 に関する午後問題 ～ 10進数に変換 ～</h2>
<p>浮動小数点数は、 CPU のメーカーとして有名なインテルによって考案され、現在では、 IEEE 754 という規格になっています。</p>
<p>この規格では、符号部、指数部、仮数部を、 1 ビット、 8 ビット、 23 ビットにして、全体を 32 ビットで表す「単精度浮動小数点数」と、それぞれを、 1 ビット、 11 ビット、 52 ビットにして、全体を 64 ビットで表す「倍精度浮動小数点数」があります。これらは、私たちが普段使っているパソコンの CPU でも採用されています。</p>
<p>&nbsp;</p>
<p>以下は、浮動小数点数に関する午後問題の一部を抜粋したものです。 IEEE 754 の単精度浮動小数点数がテーマになっています。単精度浮動小数点数の説明を読んでから、具体例を見て、それが 10 進数でいくつかを答える、という内容になっています。</p>
<p>「そんなの楽勝だよ！」と思って説明を読んでみると、「何これ？」と思うことがいくつかあるでしょう。それは、 IEEE 754 では、先ほどの午前問題で説明した浮動小数点数の仕組みに、ちょっとした工夫が加えられているからです。さらに困ったことに、その工夫が、かなり難しい表現で説明されています。ざっとで OK ですので、説明を読んでみてください。</p>
<div class="card-panel mag_h30">
問 1　平成 24 年度 春期 午後（一部抜粋）</p>
<p>浮動小数点数に関する次の記述を読んで，設問 1， 2 に答えよ。</p>
<dl class="inline mag_h40">
<dt>(1)</dt>
<dd>a × 2<sup>β</sup> の形で表記される浮動小数点数を，図 1 に示す 32 ビット単精度浮動小数点形式 (以下，単精度表現という) で表現する。ここで， α と β は次の条件を満たすものとする。</dd>
<dd class="mag_lt45">
α = 0， 又は 1 ≦ | α | &lt; 2<br />
-126 ≦ β ≦ 127
</dd>
<figure>
<img class="materialboxed z-depth-5 responsive-width" data-caption="図1　32 ビット単精度浮動小数点形式" src="../../wp-content/uploads/2021/01/h24h_q1_figure1.jpg" loading="lazy"><figcaption>図 1　32 ビット単精度浮動小数点形式</figcaption></figure>
<dd>
<dd>
<dl class="block">
<dt>① 符号部(ビット番号 31)</dt>
<dd>α の値が正のとき 0 ，負のとき 1 が入る。</dd>
<dt>② 指数部(ビット番号 30 ~ 23)</dt>
<dd>β の値に 127 を加えた値が 2 進数で入る。</dd>
<dt>③ 仮数部(ビット番号 22 ~ 0)</dt>
<dd>| α | の整数部分 1 を省略し，残りの小数部分が， ビット番号 22 に小数第 1 位が来るような 2 進数で入る。</dd>
<p>ただし， α の値が 0 の場合，符号部，指数部，仮数部ともに 0 とする。
</dl>
</dd>
<dt>(2)</dt>
<dd>例えば， 10 進数の 0.75 を 2 進数で表すと， (0.11)<sub>2</sub> となる。これは (1.1)<sub>2</sub> × 2<sup>-1</sup> と表記でき，単精度表現では，図 2 のとおり，符号部は(0)<sub>2</sub>，指数部は -1 に 127 を加えて (01111110)<sub>2</sub> となり，仮数部は (1.1)<sub>2</sub> の小数部分が入るので， (100･･･0)<sub>2</sub>  となる。ここで， 00･･･0 は 0 が連続していることを表す。
</dd>
<figure>
<img class="materialboxed z-depth-5 responsive-width" data-caption="図2　0.75の単精度表現" src="../../wp-content/uploads/2021/01/h24h_q1_figure2.jpg" loading="lazy"><figcaption>図 2　0.75 の単精度表現</figcaption></figure>
</dl>
<p>設問 1 　次の単精度表現が表す数値として正しい答えを，解答群の中から選べ。</p>
<figure>
<img class="materialboxed z-depth-5 responsive-width" src="/fenavi/wp-content/uploads/2021/01/h24h_q1_figure3.jpg" loading="lazy"><br />
</figure>
<p>解答群<br />
ア　3 × 2<sup>-125</sup>　　イ　3 x 2<sup>-122</sup>　　<br class="hide-on-med-and-up">ウ　3 × 2<sup>5</sup>　　エ　3 × 2<sup>132</sup><br />
オ　11 × 2<sup>-125</sup>　　力　11 × 2<sup>-122</sup>　　<br class="hide-on-med-and-up">キ　11 × 2<sup>5</sup>　　ク　11 × 2<sup>132</sup>
</div>
<p>それでは、やさしい言葉で、 IEEE 754 の単精度浮動小数点数の符号部、指数部、仮数部の仕組みを説明しましょう。ここでは、 α × 2<sup>β</sup>としているので、 α が仮数部で、 β が指数部です。</p>
<dl class="inline background c-round">
<dt>(1)</dt>
<dd>符号部の</p>
<blockquote><p>α が正の時 0 、負のとき 1 が入る</p></blockquote>
<p>は、午前問題で説明したことと同じです。仮数部の α には正と負があるので、それを符号部の 0<sub>(2)</sub> と 1<sub>(2)</sub> で表すという意味です。</dd>
<dt>(2)</dt>
<dd>指数部の</p>
<blockquote><p> β の値に 127 を加えた値が 2 進数で入る</p></blockquote>
<p>は、午前問題で説明しなかったことです。これは、指数部にも正と負があるので、「イクセス表現（日本語では「げたばき表現」と呼ばれます）」を使うという意味です。イクセス表現は、マイナス符号を使わずに、 0 と 1 だけで負の値を示す方法です。「 2 の補数表現」という方法を聞いたことがあると思いますが、それとは別の方法です。</dd>
<dd><span class="u">イクセス表現は、表せる数値の範囲の真ん中の数をゼロとみなす、という方法</span>です。</p>
<p>たとえば、 1 ～ 13 ( A ～ K ) のカードを持つトランプでイクセス表現を使うなら、 1 ～ 13 の真ん中である ( 1 ＋ 13 ) ÷ 2 = 7 をゼロとみまします。こうすれば、 1 ～ 13 で -6 ～ 6 を表せます。</p>
<p>単精度浮動小数点数の指数部は、 8 ビットなので、 00000000<sub>(2)</sub> ～11111111<sub>(2)</sub> の真ん中である ( 00000000<sub>(2)</sub> + 11111111<sub>(2)</sub>) ÷ 2 = 11111111<sub>(2)</sub> ÷ 2 をゼロとみまします。</p>
<p>2 進数の数は、 1 ビット右シフトすれば 2 で割った値になるので、 11111111<sub>(2)</sub> ÷ 2 = 01111111<sub>(2)</sub> です。 01111111<sub>(2)</sub> を 10 進数で表すと 127 です。</p>
<p>つまり、指数部の</p>
<blockquote><p>β の値に 127 を加えた値が 2 進数で入る</p></blockquote>
<p>とは、 <span class="u">127 をゼロとみなすという意味</span>なのです。</p>
<p>これによって、 β で表せる数の範囲は、 -126 ～ 127 になります。問題の説明では、これを</p>
<blockquote><p>-126 ≦ β ≦ 127</p></blockquote>
<p>と示しています。</dd>
<dt>(3)</dt>
<dd>仮数部の</p>
<blockquote><p>｜α｜ の整数部分の 1 を省略し、残りの小数部分が、ビット 22 に小数第 1 位が来るような 2 進数で入る</p></blockquote>
<p>は、午前問題で説明した仕組みに、ちょっとした工夫が加えられています。</p>
<p>午前問題では、 11.1<sub>(2)</sub> = 0.111<sub>(2)</sub> × 2<sup>2</sup> と変形して 0. を省略すると説明しましたが、 IEEE 754 では、 11.1<sub>(2)</sub> = 1.11<sub>(2)</sub> × 2<sup>1</sup> と変形して先頭の 1. を省略するのです。実際には存在する 1. を省略することで、全体で表せるビット数が 1 ビット増える、という工夫です。<span class="u">「ビット 22 に小数第 1 位が来る」とは、仮数部は左詰めにする、ということ</span>です。</dd>
<dt></dt>
<dd>11.1<sub>(2)</sub> = 1.11<sub>(2)</sub>×2<sup>1</sup> と変形するのですから、仮数部の α は 1 以上で 2 未満の数になります。問題の説明では、これを </p>
<blockquote><p>1 ≦ | α | &lt; 2</p></blockquote>
<p>と示しています。 <span class="u">| | で囲んで、絶対値としているのは、 α が負の値の場合もあるから</span>です。</p>
<p>なお、</p>
<blockquote><p>α = 0 、又は 1 ≦ | α | &lt; 2</p></blockquote>
<p>と示しているのは、 α が 0 の場合は、 1.・・・ と変形できないので、その場合には、これも問題の説明にありますが、「ただし、 α の値が 0 の場合、符号部、指数部、仮数部ともに 0 とする」からです。</dd>
</dl>
<p>IEEE 754 の単精度浮動小数点数の仕組みがわかったところで、設問 1 を解いてみましょう。問題には、具体例として、 10 進数の 0.75 がどのように表現されるかが示されていますが、それを見なくても大丈夫でしょう。以下に、問題と選択肢を示します。</p>
<div class="card-panel mag_h30">設問 1 　次の単精度表現が表す数値として正しい答えを，解答群の中から選べ。</p>
<figure>
<img class="materialboxed z-depth-5 responsive-width" src="../../wp-content/uploads/2021/01/h24h_q1_figure3.jpg" loading="lazy"><br />
</figure>
<p>解答群<br />
ア　3 × 2<sup>-125</sup>　　イ　3 x 2<sup>-122</sup>　　<br class="hide-on-med-and-up">ウ　3 × 2<sup>5</sup>　　エ　3 × 2<sup>132</sup><br />
オ　11 × 2<sup>-125</sup>　　力　11 × 2<sup>-122</sup>　　<br class="hide-on-med-and-up">キ　11 × 2<sup>5</sup>　　ク　11 × 2<sup>132</sup>
</div>
<dl>
<dt>符号部</dt>
<dd>0<sub>(2)</sub> なので、正です。</dd>
<dt>指数部</dt>
<dd>00000101<sub>(2)</sub> = 5 です。ここでは、 127 を 0 とみなすイクセス表現なので、この 5 は、 5 &#8211; 127 = -122 を意味しています。</dd>
<dt>仮数部</dt>
<dd>011000・・・0<sub>(2)</sub> で、先頭の 1. が省略されているので、実際には 1.011000・・・0<sub>(2)</sub> です。</dd>
</dl>
<p>したがって、この浮動小数点数は、 + 1.011000・・・0<sub>(2)</sub> × 2<sup>-122</sup> を表しています。</p>
<p>&nbsp;</p>
<p>選択肢は、どれも小数点以下のない 10 進数になっているので、</p>
<p>1.011000・・・0<sub>(2)</sub> × 2<sup>-122</sup> = 1011.000・・・0<sub>(2)</sub> × 2<sup>-125</sup> と変形します。</p>
<p>1011 は、 10 進数で 11 なので、</p>
<div class="background c-round">
1011.000・・・0<sub>(2)</sub> × 2<sup>-125</sup><br />
= 11 × 2<sup>-125</sup>
</div>
<p>です。したがって、選択肢オが正解です。</p>
<p>&nbsp;</p>
<p><span class="chip mag_rt05">解答</span>設問 1　オ</p>
<div class="divider mag_h50"></div>
<p>いかがでしたか？</p>
<p>符号部、指数部、仮数部という 3 つの情報で 1 つの数を表現している仕組みを知ったことで、浮動小数点数をしっかりと理解できたでしょう。</p>
<p>この連載では、今後も、多くの受験者が苦手としている用語を取り上げて行きます。それでは、またお会いしましょう！</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/float/">基本情報でわかる 浮動小数点 「3つの情報で1つの数を表す仕組みを知れば、浮動小数点数がわかる」</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>基本情報でわかる MIME タイプ 「電子メールの仕組みを知れば役割がわかる」</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/mime_type/</link>
		<pubDate>Tue, 08 Dec 2020 07:15:13 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[ネットワーク]]></category>
		<category><![CDATA[午前問題と午後問題の違い]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=mastering_tech&#038;p=4966</guid>
		<description><![CDATA[<p>この連載では、基本情報技術者試験によく出題されるテクノロジー関連の用語を、午前問題と午後問題のセットを使って解説します。 午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/mime_type/">基本情報でわかる MIME タイプ 「電子メールの仕組みを知れば役割がわかる」</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>午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸暗記では得られない明確さで、用語を理解できるようになります。</p>
<p>今回のテーマは、 <span class="bold">MIME</span> です。</p>
<style>figure{position:relative;}@media screen and (max-width:600px){dd{margin-left:0;}}table{font-size:.85em;}pre,.mono-font{font-family:'consolas','Courier New',"HCo Gotham SSm",Gotham,"ヒラギノ角ゴ Pro W3","Hiragino Kaku Gothic ProN","Hiragino Sans","BIZ UDPGothic",Meiryo,sans-serif!important;}.italic-text{font-style:italic;}.under-line{border-bottom:.2em solid black}.chip{background:#03a9f4;color:white;}</style>
<h2>MIME に関する午前問題 ～ MIME とは～</h2>
<p>いきなりですが、以下の午前問題を見てください。</p>
<div class="card-panel mag_h30">
問 34　(平成 30 年度 秋期)</p>
<p>インターネットにおける電子メールの規約で，ヘッダフィールドの拡張を行い，テキストだけでなく、音声，画像なども扱えるようにしたものはどれか。</p>
<p>ア　HTML　　イ　MHS　　ウ　MIME　　エ　SMTP
</p></div>
<p>この問題の答えは、選択肢ウの MIME です。</p>
<p><span class="u">そもそも、インターネットの電子メールは、テキスト（文字だけから構成されたデータ）しか送れない</span>ようになっています。</p>
<p>電子メールに、音声や画像などを添付できるのは、それらをテキストに変換しているからです。そのための規格が、 <span class="bold">MIME</span> なのです。</p>
<p>MIME は、 Multipurpose Internet Mail Extensions （多目的なインターネットのメールの拡張）の略語で「マイム」と読みます。 MIME は、もともとテキストしか送れないインターネットの電子メールを、音声や画像なども送れるように、多目的に拡張したものです。</p>
<p class="mag_tp20 mag_bt40"><span class="chip mag_rt05">解答</span>ウ</p>
<h2>MIME に関する午後問題 ～ MIME の仕組み ～</h2>
<p>先ほどの午前問題で、 MIME という言葉の意味と概要はわかりましたが、どのような仕組みで音声や画像などの添付が実現されているのでしょうか。</p>
<p>以下は、 MIME に関する午後問題です。この問題を解けば、仕組みがわかります。説明の区切りごとにポイント解説を挿入しますので、少しずつ問題を見ていきましょう。</p>
<div class="card-panel mag_h30">
問 3　平成 24 年度 秋期 午後（一部抜粋）</p>
<p>　電子メールで用いる MIME 形式に関する次の記述を読んで，設問 1,  2 に答えよ。</p>
<p>　インターネットの電子メールは，規格上， US-ASCII のような 7 ビット符号で書か れたテキストしか送信できない。そのため， UTF-8 のような 8 ビット符号で書かれ たテキストや，画像データなどのバイナリデータを電子メールで送信する際は， MIME ( Multipurpose Internet Mail Extensions ) と呼ばれる書式 (以下， MIME 形式という) に従ってメッセージを作成する。</p>
<ul class="background c-round mag_h30">
<div class="chip"><i class="material-icons white-text mag_rt05">info</i>ポイント解説</div>
<li>インターネットで送れるテキストは、半角英数記号の 1 文字を 7 ビットで表す US-ASCII だけです。</li>
<li>US-ASCII の文字でないデータは、 MIME という形式で、 US-ASCII の文字に変換して送っています。</li>
</ul>
<p>　MIME 形式では， 7 ビット符号で書かれたテキスト以外のコンテンツを， base64 や quoted-printable などの方式で 7 ビット符号に変換 (以下，エンコードという) する。 ただし，エンコードを行うコンピュータのメモリ上では， 7 ビット符号を，先頭に 0 のビットを 1 ビット付加した 8 ビット ( 1 バイト) として取り扱う。</p>
<ul class="background c-round mag_h30">
<div class="chip"><i class="material-icons white-text mag_rt05">info</i>ポイント解説</div>
<li>MIME 形式には、 base64 や quoted-printable などがあります。</li>
<li>メモリ上では、 7 ビット符号の先頭に 0 を付加して、 8 ビット（ 1 バイト）で取り扱います。メモリは、 8 ビット単位で読み書きするものだからです。</li>
</ul>
<p>　base64 によるエンコードでは，コンテンツを先頭から 6 ビットごとに区切り，各 6 ビットを，ビットパターンごとに定められた， US-ASCII の図形文字 1 文字に変換する。</p>
<ul class="background c-round mag_h30">
<div class="chip"><i class="material-icons white-text mag_rt05">info</i>ポイント解説</div>
<li>base64 では、データの全体を先頭から 6 ビットごとに区切り、それぞれを US-ASCII の 1 文字に変換します。</li>
<li>6 ビットなら、 7 ビットの US-ASCII のいずれかの文字に対応付けられるからです。</li>
<li>どのように対応付けるのかは、あらかじめ決められています。</li>
</ul>
<p>　一方， quoted-printable によるエンコードでは，コンテンツをバイト列とみなし， US-ASCII の制御文字又は図形文字 &#8220;=&#8221; と一致するバイト，及び先頭ビットが 1 のバイトを， &#8220;=XX&#8221; ( XXは 2 桁の 16 進数字列) の形の 3 文字の US-ASCII の図形文字列に置き換える。US-ASCII の図形文字 ( &#8220;=&#8221; を除く) と一致するバイトは置き換えない。幾つかの例外があるが，ここでは考慮しなくてよいものとする。</p>
<ul class="background c-round mag_h30">
<div class="chip"><i class="material-icons white-text mag_rt05">info</i>ポイント解説</div>
<li>quoted-printable では、データの全体を 1 バイト（ 8 ビット）ごとに区切り、その 1 バイトの最上位ビットが 0 であり、かつ、制御文字（改行や TAB などを表す特殊な文字）でないなら、 7 ビットの US-ASCII の文字と同じなので、そのまま送ります。</li>
<li>そうでない場合は、 1 バイトを &#8220;=XX&#8221; という形式の US-ASCII の 3 文字に変換します。 &#8220;XX&#8221; は、 1 バイトのデータを 2 桁の 16 進数で表したものです。たとえば、 11111111 という 1 バイト（ 8 ビット）のデータは、 &#8220;=FF&#8221; に変換します。</li>
<li>なお、 &#8220;=&#8221; は、 &#8220;=XX&#8221; という形式で使うので、 &#8220;=&#8221; を文字として送る場合には、 &#8220;=3D&#8221; に変換します。 US-ASCII で &#8220;=&#8221; の符号は、 0111101（ 16 進数で 3D ）です。</li>
</ul>
<p>　例えば，UTF-8 で書かれたテキスト &#8220;<span class="mono-font">&copy;△IPA△2012.</span>&#8221; ( &#8220;<span class="mono-font">&copy;</span>&#8221; には 16 進数で C2A9 の 2 バイトの符号が，他の文字には US-ASCII と同じ 1 バイトの符号が，それぞれ割り当てられている) を<span class="blank">a1</span>でエンコードすると &#8220;<span class="mono-font">=C2=A9△IPA△2012.</span>&#8221; になる。同じテキストを<span class="blank">a2</span>でエンコードすると &#8220;<span class="mono-font">wqkgSVBBIDIwMTIu</span>&#8221; となり，いずれも US-ASCII に含まれる図形文字だけから成る 7 ビット符号のバイト列となる。ここで， &#8220;△&#8221; は空白 ( 符号は 16 進数で 20 ) を 表すものとする。</p>
<ul class="background c-round mag_h30">
<div class="chip"><i class="material-icons white-text mag_rt05">info</i>ポイント解説</div>
<li>quoted-printable と base64 には、それぞれ適した場面があります。</li>
<li>音声や画像のデータを例にすると面倒なので、ここでは、 1 文字を 8 ビットで表す UTF-8 という形式のテキストを例にしています。</li>
<li>空欄 a1 では、 C2A9 という符号の文字を &#8220;=C2&#8221; と &#8220;=A9&#8221; に変換し、その他の US-ASCII と同じ符号の文字を変換せずに、 &#8220;△IPA△2012&#8221; としているので、 quoted-printable です。</li>
<li>空欄 a1 が quoted-printable なので、空欄 a2 は base64 です。</li>
<li>base64 では、データの全体を先頭から 6 ビットごとに区切って US-ASCII 文字に変換するので、変換後のテキストは、元のテキストと、まったく異なったものになっています。</li>
</ul>
<p>　エンコード後のデータ量に着目すると，大部分が US-ASCII に含まれる図形文字で構成されているテキストのエンコードには<span class="blank">a3</span>が適しており，バイナリデータのエンコードには<span class="blank">a4</span>が適している。</p>
<ul class="background c-round mag_h30">
<div class="chip"><i class="material-icons white-text mag_rt05">info</i>ポイント解説</div>
<li>base64 は、どのようなデータでも、 6 ビットごとに区切って 7 ビットの US-ASCII に変換するので、変換後のデータ量が多くなります。</li>
<li>quoted-printable では、最上位ビットが 1 でない 8 ビットの文字（制御文字と &#8220;=&#8221; でない文字）なら、 7 ビットの US-ASCII に変換されるので、データ量が少なくなります。ただし、最上位ビットが 1 の 8 ビットのデータは、 &#8220;=XX&#8221; という 3 文字（ US-ASCII で 3 文字 = 7 ビット× 3 = 21 ビット）に変換されるので、データ量が多くなります。 6 ビットが 7 ビットになる base64 より、はるかに多くなります。</li>
<li>したがって、データ量を少なくするには、大部分が US-ASCII に含まれる文字で構成されているテキストデータなら quoted-printable が適していて（空欄 a3 ）、最上位ビットが 1 のデータが多々あるバイナリデータなら base64 が適しています（空欄 a4 ）。</li>
</ul>
<p>　UTF-8 では，平仮名 1 文字に先頭ビットが 1 であるバイト三つから成る符号を割り当てているので， UTF-8 で書かれた 6 文字の平仮名から成るテキストを quoted-printable でエンコードすると，<span class="blank">b</span>文字の文字列となる。</p>
<ul class="background c-round mag_h30">
<div class="chip"><i class="material-icons white-text mag_rt05">info</i>ポイント解説</div>
<li>quoted-printable では、先頭ビットが 1 である 1 バイトのデータが &#8220;=XX&#8221; という US-ASCII の 3 文字に変換されるので、先頭ビットが 1 で、 1 文字が 3 バイトで、全部で 6 文字あるなら、 3 × 3 × 6 = 54 文字（空欄 b ）に変換されます。</li>
</ul>
<dl class="mag_h30">
<dt>設問 1</dt>
<dd>記述中の<span class="blank"></span>に入れる正しい答えを，解答群の中から選べ。ただし， a1 ～ a4 に入れる答えは， a に関する解答群の中から組合せとして正しいものを選ぶものとする。
</dd>
</dl>
<p>a に関する解答群</p>
<p class="grey-text hide-on-med-and-up mag_h10 small-text"><i class="material-icons light-blue-text mag_rt05">swipe</i>表は横スクロールできます</p>
<div  class="table-container mag_h30">
<table class="responsive-width">
<thead>
<tr>
<th></th>
<th>a1</th>
<th>a2</th>
<th>a3</th>
<th>a4</th>
</tr>
</thead>
<tbody>
<tr>
<td>ア</td>
<td>base64</td>
<td>quoted-printable</td>
<td>base64</td>
<td>quoted-printable</td>
</tr>
<tr>
<td>イ</td>
<td>base64</td>
<td>quoted-printable</td>
<td>quoted-printable</td>
<td>base64</td>
</tr>
<tr>
<td>ウ</td>
<td>quoted-printable</td>
<td>base64</td>
<td>base64</td>
<td>quoted-printable</td>
</tr>
<tr>
<td>エ</td>
<td>quoted-printable</td>
<td>base64</td>
<td>quoted-printable</td>
<td>base64</td>
</tr>
</tbody>
</table>
</div>
<p>b に関する解答群</p>
<p>ア　8　　イ　18　　ウ　24　　エ　54</p>
<ul class="background c-round mag_h30">
<div class="chip"><i class="material-icons white-text mag_rt05">info</i>ポイント解説</div>
<li>これらは、設問 1 の a1, a2, a3, a4 および b の解答群です。</li>
</ul>
<dl>
<dt>設問 2</dt>
<dd>MIME 形式を使用すると， 1 通の電子メールに複数のコンテンツを格納することができる。 1 通の電子メールに二つのコンテンツを格納した MIME 形式のメッセージは，図 1 のようになる。</dd>
<dd>
<div class="mag_h10 background c-round small-text blue-grey-text hide-on-med-and-up"><i class="material-icons light-blue-text mag_rt05">info</i>スマートフォンでご覧の際、図 1 は右スクロールできます</div>
<figure>
<pre class="responsive-width grey lighten-5 blue-grey-text text-darken-4">
<span class="grey lighten-2">通常の電子メールのヘッダ</span>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="<span class="italic-text under-line">delimiter</span>"

--<span class="italic-text under-line">delimiter</span>
<span class="grey lighten-2">コンテンツごとの属性を示すヘッダ</span>

<span class="grey lighten-2">コンテンツ1</span>
--<span class="italic-text under-line">delimiter</span>
<span class="grey lighten-2">コンテンツごとの属性を示すヘッダ</span>

<span class="grey lighten-2">コンテンツ2</span>
--<span class="italic-text under-line">delimiter</span>--
</pre>
<p class="grey-text small-text center">注記 網掛けは，その位置に格納される情報の種類を表している。</p><figcaption>図 1　二つのコンテンツを格納した MIME 形式のメッセージ</figcaption></figure>
</dd>
</dl>
<ul class="background c-round mag_h30">
<div class="chip"><i class="material-icons white-text mag_rt05">info</i>ポイント解説</div>
<li>設問 2 を解くと、先ほどの午前問題の中にあった「ヘッダフィールドの拡張」とは何であるかがわかります。</li>
<li>電子メールには、メールの「コンテンツ（内容）」の前に「ヘッダ（メールアドレス、件名、メールサーバなどの情報）」があります。図 1 に示されたように、 MIME 形式のメッセージには、通常の電子メールのヘッダの後に、 <code class="mono-font">MIME-Version: 1.0</code> および <code class="mono-font">Content-Type: multipart/mixed; boundary="delimiter"</code> という情報が付加されています。これらが「ヘッダフィールドの拡張」です。</li>
</ul>
<dl>
<dd>　<code class="mono-font">boundary="<span class="italic-text mono-text under-line">delimiter</span>"</code> の <span class="mono-text under-line italic-text">delimiter</span> には，格納したコンテンツの区切りを示す文字列を指定する。</dd>
</dl>
<ul class="background c-round mag_h30">
<div class="chip"><i class="material-icons white-text mag_rt05">info</i>ポイント解説</div>
<li>「ヘッダフィールドの拡張」で注目してほしいのは、 <code class="mono-font">boundary="delimiter"</code>の部分です。これは、コンテンツの区切りを示す文字列を指定しています。</li>
<li>MIME 形式では、メールのコンテンツに、通常のテキストだけでなく、 base64 や quoted-printable でテキストに変換したデータが含まれる場合があるので、それぞれの区切りが必要なのです。</li>
<li>区切りを示す文字列は、何でもでも構わないのですが、ここでは、例として &#8220;delimiter&#8221; という文字列にしています。</li>
</ul>
<dl>
<dd>　<span class="mono-font italic-text under-line">delimiter</span> の先頭に &#8220;&#8211;&#8221; を付けたものが一つのコンテンツの開始を示し， <span class="mono-font italic-text under-line">delimiter</span> を &#8220;&#8211;&#8221; で囲ったものが最後のコンテンツの終了を示す。</dd>
</dl>
<ul class="background c-round mag_h30">
<div class="chip"><i class="material-icons white-text mag_rt05">info</i>ポイント解説</div>
<li>区切りを示す文字列を &#8220;delimiter&#8221; とした場合には、 &#8220;&#8211;delimiter&#8221; がコンテンツの開始（区切りの開始）を示し、 &#8220;&#8211;delimiter&#8211;&#8221; がコンテンツの終わり（区切りの終わり）を示します。</li>
</ul>
<dl>
<dd>　<span class="mono-font italic-text under-line">delimiter</span> には，コンテンツに含まれる行が，誤ってコンテンツの区切りと認識されることのないような文字列を，選択しなければならない。</dd>
</dl>
<ul class="background c-round mag_h30">
<div class="chip"><i class="material-icons white-text mag_rt05">info</i>ポイント解説</div>
<li>区切りを示す文字列には、コンテンツの内容と区別できる文字列を選ぶ必要があります。</li>
<li>なぜなら、たとえば、 &#8220;&#8211;aaa&#8221; と &#8220;&#8211;aaa&#8211;&#8221; がコンテンツの区切りを示す場合には、もしも、コンテンツの内容として &#8220;&#8211;aaa&#8221; や &#8220;&#8211;aaa&#8211;&#8221; があったら、内容ではなく区切りとみなされてしまうからです。</li>
</ul>
<dl>
<dd>　&#8221;コンテンツごとの属性を示すヘッダ&#8221; には，テキストや画像などのコンテンツの種類や，エンコードの方式などを指定する。エンコードの方式には &#8220;base64&#8221; や &#8220;quoted-printable&#8221; のほか，コンテンツがエンコードされていない 7ビット符号のテキストであることを示す &#8220;7bit&#8221; などが指定できる。</dd>
</dl>
<ul class="background c-round mag_h30">
<div class="chip"><i class="material-icons white-text mag_rt05">info</i>ポイント解説</div>
<li>コンテンツの開始を示す &#8220;&#8211;delimiter&#8221; の後には、そのコンテンツの形式を示すヘッダを置きます。</li>
<li>このヘッダの中にある &#8220;7bit&#8221;, &#8220;base64&#8221;, &#8220;quoted-printable&#8221; という情報で、コンテンツの形式がわかります。</li>
</ul>
<dl>
<dd>　図 1 中の &#8220;コンテンツ1&#8221; が 7 ビット符号のテキストであって，図 2 に示す 3 行をコンテンツに含むとき， <span class="mono-font italic-text under-line">delimiter</span> として<span class="bold">ふさわしくない文字列</span>を，解答群の中から<span class="under-line">三つ</span>選べ。</dd>
<dd>
<figure>
<pre class="responsive-width grey lighten-5 blue-grey-text text-darken-4">
case1
--case2
--case3--
</pre><figcaption>図 2　&#8221;コンテンツ 1&#8243; に含まれる 3 行</figcaption></figure>
</dd>
</dl>
<p>解答群<br />
ア　<code class="mono-font">--case1</code>　　イ　<code class="mono-font">--case2</code>　　ウ　<code class="mono-font">--case3</code><br />
エ　<code class="mono-font">case1</code>　　オ　<code class="mono-font">case2</code>　　カ　<code class="mono-font">case3</code><br />
キ　<code class="mono-font">case1--</code>　　ク　<code class="mono-font">case2--</code>　　ケ　<code class="mono-font">case3--</code></p>
<ul class="background c-round mag_h30">
<div class="chip"><i class="material-icons white-text mag_rt05">info</i>ポイント解説</div>
<li>解答群の中から、もしも、それをコンテンツの区切りの文字列として使うと、 <code class="mono-font">"--区切り文字"</code>  または <code class="mono-font">"--区切り文字--"</code> が、コンテンツである <code class="mono-font">"case1"</code>, <code class="mono-font">"--case2"</code>, <code class="mono-font">"--case3--"</code> と一致してしまうものを選びます。</li>
<li>選択肢オの <code class="mono-font">"case2"</code> は、先頭に <code class="mono-font">"--"</code> を付けると、 <code class="mono-font">"--case2"</code> と一致します。</li>
<li>選択肢カの <code class="mono-font">"case3"</code> は、 <code class="mono-font">"--"</code> で囲むと、 <code class="mono-font">"--case3--"</code> と一致します。</li>
<li>選択肢ケの <code class="mono-font">"case3--"</code> は、先頭に <code class="mono-font">"--"</code> を付けると、 <code class="mono-font">"--case3--"</code> と一致します。</li>
<li>したがって、コンテンツの区切りの文字列として使えないのは、オ、カ、ケです。</li>
</ul>
</div>
<p>&nbsp;</p>
<p><span class="chip mag_rt05">解答</span>設問 1　a ― エ, b ― エ　設問 2 オ、カ、ケ</p>
<div class="divider mag_tp50 mag_bt30"></div>
<p>いかがでしたか？</p>
<p>電子メールの仕組みを知ったことで、 MIME の役割を、しっかりと理解できたでしょう。</p>
<p>この連載では、今後も、多くの受験者が苦手としている用語を取り上げて行きます。それでは、またお会いしましょう！</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/mime_type/">基本情報でわかる MIME タイプ 「電子メールの仕組みを知れば役割がわかる」</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>基本情報でわかる 7セグメントLED 「 1 と 0 を書き込めば点灯するパターンがわかる」</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/7segments_led/</link>
		<pubDate>Tue, 01 Dec 2020 08:19:55 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[2進数]]></category>
		<category><![CDATA[ハードウェア]]></category>
		<category><![CDATA[午前問題と午後問題の違い]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=mastering_tech&#038;p=4921</guid>
		<description><![CDATA[<p>この連載では、基本情報技術者試験によく出題されるテクノロジー関連の用語を、午前問題と午後問題のセットを使って解説します。 午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/7segments_led/">基本情報でわかる 7セグメントLED 「 1 と 0 を書き込めば点灯するパターンがわかる」</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>午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸暗記では得られない明確さで、用語を理解できるようになります。</p>
<p>今回のテーマは、 <span class="bold">7 セグメント LED</span> です。</p>
<style>figure{position:relative;margin:1.5em 0}.comment{font-size:1em;font-weight:700;color:#f44336;position:absolute;right:45%;}.half-width-on-large{width:50%;margin:auto;}@media screen and (max-width:600px){dd{margin-left:0;}.half-width-on-large{width:100%}}dl.inline dd{margin-left:2em;}.block-top{display:flex;align-items:start;}</style>
<h2>7 セグメント LED とは？</h2>
<p>7 セグメント LED は、 7 つのセグメント（ segment ＝ 部分）から構成された LED（ Light Emitting Diode ＝ 発光ダイオード）による表示器です。 7 つの細長い LED の点灯パターンで、数字や英字を表します。多くの場合に、ドットを表す円形の LED も 1 つあります。</p>
<p>以下は、 7 セグメント LED で、 0 ～ 9 の数字と A, b, C, d, E, F の英字を表した例です。これらの点灯パターンを使えば、 16 進数の 1 桁を表せます。</p>
<figure><figcaption>図　 7 セグメント LED で数字と英字を表した例</figcaption><img class="materialboxed z-depth-5 half-width-on-large" data-caption="図　 7 セグメント LED で数字と英字を表した例" src="../../wp-content/uploads/2020/12/7sgs_led.png" loading="lazy"><br />
</figure>
<p>試験には、 2 進数のデータで 7 セグメントを LED を点灯させる問題が出ます。</p>
<p><span class="u">8 ビットの 2 進数の 1 桁が、 7 セグメント（ドットも含めると全部で 8 セグメント） LED の 1 つの LED に対応付けられます。</span> 7 セグメント LED の種類によって、 1 で点灯するものと、 0 で点灯するものがあります。どちらであるかは、問題文に示されます。</p>
<h2>7 セグメント LED に関する午前問題</h2>
<p>以下は、 7 セグメント LED に関する午前問題です。</p>
<p>8 ビットの 2 進数の各桁に P7 ～ P0 という名前を付け、 7 セグメント LED の各 LED に a ～ g および Dt という名前を付けています。 2 進数の P7 ～ P0 と LED の a ～ g および Dt の対応は、問題の左側の図に示されています。</p>
<p>ここでは、 2 進数の各桁をポートと呼び、ポートが 1 のとき LED が点灯します。 16 進数で 6D を出力したときの LED の点灯パターンを求めるという問題です。</p>
<div class="card-panel mag_h30">
問 25　(平成 24 年度 春期)</p>
<p>7 セグメント LED 点灯回路で，出力ポートに 16 進数で 6D を出力したときの表示状態はどれか。ここで，P7 を最上位ビット ( MSB )， P0 を最下位ビット ( LSB ) とし，ポート出力が 1 のとき， LED は点灯する。</p>
<figure>
<img class="materialboxed z-depth-5 responsive-width" src="../../wp-content/uploads/2020/12/q25_figure.jpg" loading="lazy"><br />
</figure>
<div class="row flex wrap">
<div class="col m3 s6 block-top">ア<img src="../../wp-content/uploads/2020/12/q25_option_a.jpg" loading="lazy"></div>
<div class="col m3 s6 block-top">イ<img src="../../wp-content/uploads/2020/12/q25_option_i.jpg" loading="lazy"></div>
<div class="col m3 s6 block-top">ウ<img src="../../wp-content/uploads/2020/12/q25_option_u.jpg" loading="lazy"></div>
<div class="col m3 s6 block-top">エ<img src="../../wp-content/uploads/2020/12/q25_option_e.jpg" loading="lazy"></div>
</div>
</div>
<p>16 進数の 6D は、 2 進数で 01101101 です。</p>
<p>この 0 と 1 を問題の左側に示された図の P7 ～ P0 に書き込むと、以下のようになります。 <span class="u">P7 が最上位桁で、 P0 が最下位桁であることに注意してください。</span></p>
<figure><figcaption>図　問題の左側に示された図に 0 と 1 を書き込む</figcaption><img class="materialboxed z-depth-5 responsive-width" data-caption="図　問題の左側に示された図に0と1を書き込む" src="../../wp-content/uploads/2020/12/q25_circuit_marked.png" loading="lazy"><br />
</figure>
<p>1 で点灯し、 0 で消灯なので、問題の右側に示された図で、点灯する a, c, d, f, g の LED を塗ると、数字の 5 の点灯パターンになります。したがって、選択肢ウが正解です。</p>
<figure><figcaption>図　問題の右側に示された図に 0 と 1 を書き込む</figcaption><img class="materialboxed z-depth-5 half-width-on-large" data-caption="図　問題の右側に示された図に0と1を書き込む" src="../../wp-content/uploads/2020/12/marked_led.gif" loading="lazy"><br />
</figure>
<p class="mag_tp20 mag_bt40"><span class="chip mag_rt05">解答</span>ウ</p>
<h2>7 セグメント LED に関する午後問題</h2>
<p>以下は、 7 セグメント LED に関する午後問題（一部抜粋）です。温度モニタのシステムの表示器として7セグメント LED が使われています。</p>
<p>0 ～ 70 °C の温度を 8 段階のレベルに対応させ、 1 ～ 8 の数字で示します。ここでも、先ほどの午前問題と同様に、 2 進数の各桁をポートと呼び、ポートが 1 のとき LED が点灯します。問題文を読んでから、設問 1 を解いてみましょう。</p>
<div class="card-panel mag_h30">
問 2　平成 29 年度 春期 午後（一部抜粋）</p>
<p>　温度モニタに関する次の記述を読んで，設問 1，2 に答えよ。</p>
<div class="mag_lt10">
　図 1 に，ある温度モニタのシステム構成図の一部を示す。</p>
<p>　タイマ割込み発生時に起動される割込みプログラムが，温度検出器の出力値を A/D 変換器を介して取り込み，対応した値を 7 セグメント LED (以下， LED という) に表示するシステムである。温度の検出範囲は 0 ~ 70 °C とし，検出された温度 (以下，検出温度という) を 8 段階のレベルに対応させて， &#8220;1&#8221; ~ &#8220;8&#8221; の数字で表示する。割込みプログラムが起動されてから表示処理の完了までの時間は，タイマ割込み間隔に比べて十分に短いものとする。</p>
<p>　LED の各セグメントは，対応する出力ポートのビットの値が 1 のとき点灯し， 0 のとき消灯する。LED に &#8220;1&#8221; ~ &#8220;8&#8221; の数字を表示するために，数字の字形に合わせて，対応する 8 ビットのデータを出力ポートのビット 0 ~ 7 に設定する。このデータを形状データといい，出力ポートのビット 7 を最上位ビットとする 2 桁の 16 進数で表記する。
</p></div>
<figure>
<img class="materialboxed z-depth-5 responsive-width" data-caption="図1　温度モニタのシステム構成図の一部" src="../../wp-content/uploads/2020/12/q2_figure.jpg" loading="lazy"><figcaption class="small-text">注記 &#8220;2&#8221; を表示した例である。ここで，出力ポートのビット 0 には常に 0 が設定され、小数点を表示するセグメントは消灯している。</figcaption><figcaption>図 1　温度モニタのシステム構成図の一部</figcaption></figure>
<p class="bold">設問 1</p>
<p>　次の記述中の<span class="blank"></span>に入れる正しい答えを，解答群の中から選べ。</p>
<div class="mag_lt10">　検出温度は，A/D 変換器によって，表 1 に示す 10 °C ごとの温度基準値の中の 最も近い値に近似される。温度基準値の刻み幅の中央の値は高い側の温度基準値に近似される。例えば，検出温度 14 °C は 10 °C に， 15 °C は 20 °C に， 16 °C は 20 °C に近似される。温度基準値，A/D 変換器出力，レベルの関係を，表 1 に示す。
</div>
<table class="responsive-width centered mag_h30">
<caption class="grey-text">表 1　温度基準値， A/D 変換器出力，レベルの関係</caption>
<thead>
<tr>
<th>温度基準値(°C)</th>
<th>AD変換器出力( 2 進表記)</th>
<th>レベル</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>000</td>
<td>1</p>
<td>
</tr>
<tr>
<td>10</td>
<td>001</td>
<td>2</p>
<td>
</tr>
<tr>
<td>&#8942;</td>
<td>&#8942;</td>
<td>&#8942;</p>
<td>
</tr>
<tr>
<td>70</td>
<td>111</td>
<td>8</table>
<td>
</tr>
</tbody>
</table>
<div class="mag_lt10">LED の表示が図 2 のとき，出カポートに設定されている形状データは <span class="blank">a</span>， A/D 変換器出力 (2 進表記)は，<span class="blank">b</span>，検出温度の範囲は<span class="blank">c</span>である。
</div>
<figure><figcaption>図 2　LED の表示</figcaption><img class="materialboxed z-depth-5 half-width-on-large" data-caption="図2　LEDの表示"  src="../../wp-content/uploads/2020/12/q2_figure_led.jpg" alt="" /><br />
</figure>
<p>a に関する解答群<br />
ア　66　　イ　BE　　ウ　DA　　<br class="hide-on-med-and-up">エ　F2　　オ　FE</p>
<p>b に関する解答群<br />
ア　010　　イ　011　　ウ　100　　<br class="hide-on-med-and-up">エ　101　　オ　110</p>
<p>c に関する解答群<br />
ア　40 °C 以上 50 °C 未満<br />
イ　45 °C 以上 55 °C 未満<br />
ウ　50 °C 以上 60 °C 未満<br />
エ　55 °C 以上 65 °C 未満<br />
オ　60 °C 以上 70 °C 未満
</p></div>
<p>図 1 の 7 セグメント LED を 6 の形状で塗り、点灯している配線に 1 を、消灯している配線に 0 を書き込むと、以下のようになります。</p>
<figure><figcaption>図　点灯している配線に 1 を、消灯している配線に 0 を書き込む</figcaption><img class="z-depth-5 materialboxed responsive-width" data-caption="図　点灯している配線に1を、消灯している配線に0を書き込む" src="../../wp-content/uploads/2020/12/q2_q1_led.gif" alt="" /><br />
</figure>
<p>ビット 7 が最上位ビットなので、これは 10111110 という 2 進数であり、 16 進数で示すと BE です。したがって、空欄 a は、選択肢イが正解です。</p>
<p>&nbsp;</p>
<p><span class="u">表 1 を見ると、 A/D 変換器の出力の 000 ～ 111 がレベル 1 ～ 8 に対応していることがわかります。</span></p>
<p>7 セグメント LED に 6 が表示されているときの A/D 変換器の出力は、 101 です。したがって、空欄 b は、選択肢エが正解です。</p>
<p>&nbsp;</p>
<p>問題文に、</p>
<blockquote class="grey-text"><p>14 °C は 10 °C に、15 °C は 20 °C に、（中略）近似される</p></blockquote>
<p>と示されています。</p>
<p>表 1 を見ると、レベル 6 は、温度基準値が 50 °C であることがわかります。 50 °C に近似されるのは、 45 °C 以上 55° C 未満です。したがって、空欄 c の正解は、選択肢イです。</p>
<p>&nbsp;</p>
<p><span class="chip mag_rt05">解答</span>設問 1　a ― イ, b ― エ, c ― イ</p>
<div class="divider mag_h50"></div>
<p>いかがでしたか？</p>
<p>1 と 0 を書き込んで 7 セグメント LED が点灯するパターンを求める方法を、しっかりと理解できたでしょう。</p>
<p>この連載では、今後も、多くの受験者が苦手としている用語を取り上げて行きます。それでは、またお会いしましょう！</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/7segments_led/">基本情報でわかる 7セグメントLED 「 1 と 0 を書き込めば点灯するパターンがわかる」</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/mastering_tech/digital_logic/</link>
		<pubDate>Mon, 16 Nov 2020 08:38:05 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[2進数]]></category>
		<category><![CDATA[午前問題と午後問題の違い]]></category>
		<category><![CDATA[論理回路]]></category>
		<category><![CDATA[論理式]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=mastering_tech&#038;p=4877</guid>
		<description><![CDATA[<p>この連載では、基本情報技術者試験によく出題されるテクノロジー関連の用語を、午前問題と午後問題のセットを使って解説します。 午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/digital_logic/">基本情報でわかる 論理演算 「真理値表を書けば、半加算器と全加算器の仕組みがわかる」</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>午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸暗記では得られない明確さで、用語を理解できるようになります。</p>
<p>今回のテーマは、論理演算で加算を実現する <span class="bold">半加算器</span> と <span class="bold">全加算器</span> です。</p>
<style>dl.inline dd{margin-left:2em;}</style>
<h2>論理演算で加算を実現する 半加算器 とは？ 全加算器 とは？</h2>
<p>コンピュータの内部では、 0 と 1 だけの 2 進数でデータが表現され、 AND, OR, NOT, XOR などの論理演算でデータが処理されています。コンピュータの外部からは、加減乗除の四則演算を行っているように見えても、内部では論理演算が行われているのです。</p>
<p>試験には、論理演算を使って加算を実現する <span class="bold">加算器</span> に関する問題が出ます。<span class="u">減算、乗算、除算の問題が出ないのは、加算ができれば、他の演算ができるから</span>です。</p>
<ul class="background c-round mag_h30">
<li>マイナスの数を加算すれば、減算になります</li>
<li>プログラムを作って加算を繰り返せば、乗算になります</li>
<li>プログラムを作って減算を繰り返し、引けた回数をカウントすれば、除算になります</li>
</ul>
<p>加算器には、<span class="bold">半加算器（ half adder ）</span>と <span class="bold">全加算器（ full adder ）</span>があります。</p>
<p>半加算器は、 1 桁の 2 進数を <span class="u">2 つ</span>加算します。<br />
全加算器は、 1 桁の 2 進数を <span class="u">3 つ</span>加算します。</p>
<p>たとえば、 0101 と 0011 という 4 ビットの 2 進数を加算するとしましょう。</p>
<p>最下位ビットの加算では、その桁にある 2 つの数を加算するので、半加算器を使います。<br />
それ以外の桁では、その桁にある 2 つの数と、下位桁からの桁上がりの数を加算するので、全加算器を使います。</p>
<p>したがって、 4 ビットの加算では、半加算器を 1 つと、全加算器を 3 つ使うことになります。</p>
<figure class="mag_h30"><figcaption>図　4 ビットの加算の例</figcaption><img class="materialboxed z-depth-5 responsive-width" data-caption="図　4 ビットの加算の例" src="../../wp-content/uploads/2020/11/4bit_adder.png" loading="lazy"><br />
</figure>
<h2>半加算器の仕組み</h2>
<p>加算器の仕組みを説明しましょう。</p>
<p>まず、 1 桁の 2 進数を 2 つ加算する半加算器です。この加算のパターンには、以下に示した 4 通りがあります。</p>
<p>1 ＋ 1 の結果が 1 0 の 2 桁になるので、他の結果も上位桁に 0 を置いて 2 桁に統一しています。「これらの結果を見て、論理演算で加算を実現する方法を見出してください」と言われても、すぐにはピンと来ないでしょう。</p>
<figure class="mag_h30"><figcaption>図　1 桁の 2 進数を 2 つ加算するパターン</figcaption><img class="materialboxed z-depth-5 responsive-width" data-caption="図　1 桁の 2 進数を 2 つ加算するパターン" src="../../wp-content/uploads/2020/11/truth_pattern.png" loading="lazy"><br />
</figure>
<p>データに名前を付けて、真理値表を書いてみましょう。ここでは、加算する数を X および Y として、結果を C および S とします。</p>
<table class="centered mag_h30">
<caption class="grey-text mag_h10">図　1 桁の 2 進数を 2 つ加算する真理値表</caption>
<thead>
<tr class="grey lighten-4">
<th>X</th>
<th>Y</th>
<th>C</th>
<th>S</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>0</td>
<td>1</td>
<td>0</td>
<td>1</td>
</tr>
<tr>
<td>1</td>
<td>0</td>
<td>0</td>
<td>1</td>
</tr>
<tr>
<td>1</td>
<td>1</td>
<td>1</td>
<td>0</td>
</tr>
</tbody>
</table>
<p>C は、 Carry （桁上がり）という意味で、 S は、 Sum （和）という意味です。この真理値表を見て、 X と Y にどのような論理演算を行うと、 C と S が得られるかを考えてください。</p>
<p>しばらく真理値表を見ていると「あっ、そうか！」と気付くはずです。</p>
<ul class="background c-round mag_h30">
<li>C は、 X と Y の両方が 1 のときだけ 1 になります。これは、 X と Y の AND 演算です</li>
<li>S は、 X と Y のどちらか一方だけが 1 のときだけ 1 になります。これは、 X と Y の XOR 演算です</li>
</ul>
<figure class="mag_h30" style="position: relative;">
<table class="centered">
<caption class="grey-text mag_h10">図　1 桁の 2 進数を 2 つ加算する真理値表</caption>
<thead>
<tr class="grey lighten-4">
<th>X</th>
<th>Y</th>
<th>C</th>
<th>S</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>0</td>
<td>1</td>
<td>0</td>
<td>1</td>
</tr>
<tr>
<td>1</td>
<td>0</td>
<td>0</td>
<td>1</td>
</tr>
<tr>
<td>1</td>
<td>1</td>
<td>1</td>
<td>0</td>
</tr>
</tbody>
</table>
<p><span class="red-text hide-on-small-only" style="position:absolute;top:3em;left:81.5%;border:dotted .2em #f44336;padding:20em .6em 1em">XOR 演算</span><span class="light-blue-text hide-on-small-only" style="position:absolute;top:3em;left:56.5%;border:dotted .2em #03a9f4;padding:20em .6em 1em">AND 演算</span><span class="red-text hide-on-med-and-up" style="position:absolute;top:4em;left:75%;border:dotted .2em #f44336;padding:20em .6em 1em">XOR 演算</span><span class="light-blue-text hide-on-med-and-up" style="position:absolute;top:4em;left:50%;border:dotted .2em #03a9f4;padding:20em .6em 1em">AND 演<br />算</span><br />
</figure>
<p>以下は、半加算器の仕組みを示したものです。</p>
<p>図の左側から入力された X と Y の加算結果が、図の右側の S と C から出力されます。</p>
<figure class="mag_h30"><figcaption>図　半加算器の仕組み</figcaption><img class="materialboxed z-depth-5 responsive-width" data-caption="図　半加算器の仕組み" src="../../wp-content/uploads/2020/11/half_adder.png" loading="lazy"><br />
</figure>
<ul class="background blue-grey-text c-round">
<li>1 本の電線で、 1 桁の 2 進数が伝えられます</li>
<li>電線の交差に丸印がある部分は、つながっています</li>
<li>丸印がない部分は、立体交差であり、つながっていません</li>
</ul>
<p>これは、回路図を書くときの決まり事です。</p>
<h2>全加算器の仕組み</h2>
<p>次は、 1 桁の 2 進数を 3 つ加算する半加算器の仕組みです。これは、「そもそも、なぜ半加算器や全加算器と呼ぶのか？」がわかれば、すんなり理解できるでしょう。</p>
<p>半加算器で 1 桁の 2 進数を 2 つ加算できるのですから、<span class="u">半加算器が 2 つあれば、 1 桁の 2 進数を 3 つ加算できます。</span>つまり、半加算器を 2 つ使えば全加算器になるのです。逆に言えば、全加算器を半分にすれば、半加算器になります。だから「全」と「半」なのです。</p>
<p>&nbsp;</p>
<p>以下は、全加算器の仕組みを示したものです。</p>
<p>図の左側から入力された X と Y と C´（ C´ は、下位桁からの桁上がりを意味します）の加算結果が、図の右側の S と C から出力されます。 </p>
<figure class="mag_h30"><figcaption>図　全加算器の仕組み</figcaption><img class="materialboxed z-depth-5 responsive-width" data-caption="図　全加算器の仕組み" src="../../wp-content/uploads/2020/11/full_adder.png" loading="lazy"><br />
</figure>
<p>X と Y を半加算器 (1) で加算し、<br />
その結果の S と C´ を半加算器 (2) で加算し、<br />
その結果の S が、全加算器の S になります。</p>
<p>全加算器の C は、<br />
半加算器 (1) の C と<br />
半加算器 (2) の C を<br />
OR 演算して得られます。</p>
<p>なぜなら、半加算器 (1) <span class="u">または</span>半加算器 (2) のいずれかで桁上がりがあれば、それが全加算器の桁上がりになるからです。「または」は OR 演算です。</p>
<h2>半加算器と全加算器に関する午前問題</h2>
<p>半加算器と全加算器の仕組みがわかったところで、午前問題を解いてみましょう。以下は、半加算器に関する午前問題です。</p>
<p>「 A 」の素子は、和を求めるので XOR 回路です。<br />
「 B 」の素子は、桁上がりを求めるので AND 回路です。</p>
<p>選択肢では、論理演算の名前を日本語で示しています。 XOR は「排他的論理和」であり、 AND は「論理積」なので、選択肢アが正解です。</p>
<div class="card-panel mag_h30">
問 22　平成 29 年度 春期 午前</p>
<p>図に示す， 1 桁の 2 進数 x と y を加算して， z ( 和の 1 桁目 ) 及び c ( 桁上げ )を出力する半加算器において， A と B の素子の組合せとして，適切なものはどれか。</p>
<p><img class="materialboxed z-depth-5 responsive-width" src="../../wp-content/uploads/2020/11/q22_half_adder.jpg" loading="lazy"></p>
<table class="centered responsive-width">
<thead>
<tr>
<th></th>
<th>A</th>
<th>B</th>
<tr>
</thead>
<tbody>
<tr>
<td>ア</td>
<td>排他的論理和</td>
<td>論理積</td>
</tr>
<tr>
<td>ィ</td>
<td>否定論理積</td>
<td>否定論理和</td>
</tr>
<tr>
<td>ウ</td>
<td>否定論理和</td>
<td>排他的論理和</td>
</tr>
<tr>
<td>エ</td>
<td>論理積</td>
<td>論理和</td>
</tr>
</tbody>
</table>
</div>
<p class="mag_tp20 mag_bt40"><span class="chip mag_rt05">解答</span>ア</p>
<p>以下は、全加算器に関する午前問題です。全加算器が、 1 桁の 2 進数を 3 つ加算するものであることを知っていれば、簡単に問題を解けるでしょう。</p>
<p>ここでは、 </p>
<div class="background c-round">
x に 1 ,<br />
y に 0 ,<br />
z（ z は、下位桁からの桁上がりだと思われます）に 1 を入力
</div>
<p>するので、 1 と 0 と 1 が加算されて、 10 という結果が得られます。</p>
<p>結果の C が 1 で、 S が 0 なので、選択肢ウが正解です。</p>
<div class="card-panel mag_h30">
問 25　(平成 21 年度 秋期)</p>
<p>図は全加算器を表す論理回路である。図中の x に 1 ， y に 0 ， z に 1 を入力したとき，出力となる c (けた上げ数) ，s (和) の値はどれか。</p>
<p><img class="materialboxed z-depth-5" style="margin: auto;"  src="../../wp-content/uploads/2020/11/q25_full_adder-300x143.jpg" alt="" loading="lazy" /></p>
<table class="centered responsive-width">
<thead>
<tr>
<th></th>
<th>c</th>
<th>s</th>
</tr>
</thead>
<tbody>
<tr>
<td>ア</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>イ</td>
<td>0</td>
<td>1</td>
</tr>
<tr>
<td>ウ</td>
<td>1</td>
<td>0</td>
</tr>
<tr>
<td>エ</td>
<td>1</td>
<td>1</td>
</tr>
</tbody>
</table>
</div>
<p class="mag_tp20 mag_bt40"><span class="chip mag_rt05">解答</span>ウ</p>
<h2>半加算器と全加算器に関するに関する午後問題</h2>
<p>今度は、午後問題を解いてみましょう。</p>
<p>以下の問題（問題の一部を抜粋しています）では、半加算器を 1 つと全加算器を 3 つ使った 4 ビットの加算器が示されています。</p>
<p>この加算器で、マイナスの数を加算するという内容です。つまり、加算器で減算を行うのです。</p>
<div class="card-panel mag_h30">
問 1　平成 21 年度 秋期 午後（一部抜粋）</p>
<p>半加算器と全加算器に関する次の記述を読んで，設問 1 ～ 3 に答えよ。</p>
<p>（設問 1 と設問 2 を省略します）</p>
<dl>
<dt>設問 3</dt>
<dd>　A, B 及び S を 2 の補数表現による 4 ビットの符号付 2 進整数とし，それぞれのビット表現を A<sub>4</sub>A<sub>3</sub>A<sub>2</sub>A<sub>1</sub>, B<sub>4</sub>B<sub>3</sub>B<sub>2</sub>B<sub>1</sub> 及び S<sub>4</sub>S<sub>3</sub>S<sub>2</sub>S<sub>1</sub>で表す (符号ビットは A<sub>4</sub>, B<sub>4</sub> 及び S<sub>4</sub> )。</dd>
<dd>　図 3は， A と B の加算を行い，結果を S に求める加算器であり，半加算器と全加算器で実現されている。ここで，C<sub>1</sub> C<sub>4</sub> は半加算器及び全加算器からのけた上がりを表す。</dd>
<dd>　この加算器に，A として-1 を，Bとして -2 (いずれも 10 進表記) を与えたとき，図 3 の C<sub>1</sub> 〜 C<sub>4</sub>の値として正しい組合せを，解答群の中から選べ。</dd>
</dl>
<figure><figcaption>図 3　 A と B を加算して S を求め加算器</figcaption><img class="materialboxed z-depth-5 responsive-width" data-caption="図 3　 A と B を加算して S を求め加算器"  src="../../wp-content/uploads/2020/11/q1_adder_fgure.jpg" alt="" loading="lazy" /><br />
</figure>
<p>解答群</p>
<table class="centered responsive-width">
<thead>
<tr>
<th></th>
<th>C<sub>1</sub></th>
<th>C<sub>2</sub></th>
<th>C<sub>3</sub></th>
<th>C<sub>4</sub></th>
</tr>
</thead>
<tbody>
<tr>
<td>ア</td>
<td>0</td>
<td>1</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>イ</td>
<td>0</td>
<td>1</td>
<td>0</td>
<td>1</td>
</tr>
<tr>
<td>ウ</td>
<td>0</td>
<td>1</td>
<td>1</td>
<td>0</td>
</tr>
<tr>
<td>エ</td>
<td>0</td>
<td>1</td>
<td>1</td>
<td>1</td>
</tr>
<tr>
<td>オ</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>カ</td>
<td>1</td>
<td>0</td>
<td>0</td>
<td>1</td>
</tr>
<tr>
<td>キ</td>
<td>1</td>
<td>0</td>
<td>1</td>
<td>0</td>
</tr>
<tr>
<td>ク</td>
<td>1</td>
<td>0</td>
<td>1</td>
<td>1</td>
</tr>
</tbody>
</table>
</div>
<p>4 ビットの 2 の補数表現を使うと、<br />
-1 は 1111 になり、<br />
-2 は 1110 になります。</p>
<p>これを 4 ビットの加算器の A<sub>4</sub>A<sub>3</sub>A<sub>2</sub>A<sub>1</sub> と B<sub>4</sub>B<sub>3</sub>B<sub>2</sub>B<sub>1</sub> に入力すると、 1 つの半加算器と 3 つの全加算器の和（ S<sub>1</sub> ～ S<sub>4</sub> ）と桁上がり（ C<sub>1</sub> ～ C<sub>4</sub> ）は、以下のようになります。</p>
<figure><figcaption>図　1111 と 1110 の加算結果</figcaption><img class="z-depth-5 materialboxed responsive-width" data-caption="図　1111 と 1110 の加算結果"  src="../../wp-content/uploads/2020/11/q1_explain.png" alt="" loading="lazy" /><br />
</figure>
<p>したがって、選択肢エが正解です。この加算器では、図の左側が下位桁であることに注意してください。</p>
<p>&nbsp;</p>
<p><span class="chip mag_rt05">解答</span>設問 3　エ</p>
<div class="divider mag_h50"></div>
<p>いかがでしたか？</p>
<p>論理演算を実現する半加算器と全加算器の仕組みを、しっかりと理解できたでしょう。</p>
<p>この連載では、今後も、多くの受験者が苦手としている用語を取り上げて行きます。それでは、またお会いしましょう！</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/digital_logic/">基本情報でわかる 論理演算 「真理値表を書けば、半加算器と全加算器の仕組みがわかる」</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
		<item>
		<title>基本情報でわかる SMTP ／ POP3 「ITエンジニア視点で見れば役割がわかる」</title>
		<link>https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/smtp_pop3/</link>
		<pubDate>Tue, 10 Nov 2020 04:44:05 +0000</pubDate>
		<dc:creator><![CDATA[矢沢 久雄]]></dc:creator>
				<category><![CDATA[SMTP POP3]]></category>
		<category><![CDATA[ネットワーク]]></category>
		<category><![CDATA[ポート番号]]></category>
		<category><![CDATA[午前問題と午後問題の違い]]></category>

		<guid isPermaLink="false">https://www.seplus.jp/dokushuzemi/fe/fenavi/?post_type=mastering_tech&#038;p=4859</guid>
		<description><![CDATA[<p>この連載では、基本情報技術者試験によく出題されるテクノロジー関連の用語を、午前問題と午後問題のセットを使って解説します。 午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸 [&#8230;]</p>
<p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/smtp_pop3/">基本情報でわかる SMTP ／ POP3 「ITエンジニア視点で見れば役割がわかる」</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>午前問題で用語の意味や概念を知り、午後問題で技術の活用方法を知ってください。それによって、単なる丸暗記では得られない明確さで、用語を理解できるようになります。</p>
<p>今回のテーマは、メールの通信プロトコルである <span class="bold">SMTP</span> と <span class="bold">POP3</span> です。</p>
<style>table{font-size:.85em;}dl.inline dd{margin-left:2em;}</style>
<h2>SMTP と POP3 とは？ ユーザー視点とエンジニア視点の違い</h2>
<p>IT エンジニアではない一般ユーザーであっても、自分でメールソフトの設定を行ったことがあるなら、メールの送信と受信のプロトコルが異なることを知っているでしょう。</p>
<p>多くの場合に、<br />
メールの送信プロトコルは、 SMTP（ Simple Mail Transfer Protocol ）であり、<br />
メールの受信プロトコルは、 POP3（ Post Office Protocol version 3 ）です。</p>
<p>これらのプロトコルを使って、メールクライアント（メールソフトが動作しているパソコン）が、自社（またはプロバイダ）のメールサーバに接続します。</p>
<figure><figcaption>図　ユーザー視点では、 SMTP は送信プロトコルで、 POP3 は受信プロトコル</figcaption><img class="materialboxed z-depth-5 responsive-width" src="../../wp-content/uploads/2020/11/smtp_pop3.jpg" loading="lazy"><br />
</figure>
<p>メールの送信が SMTP で、受信が POP3 というのは、ユーザー視点の知識です。</p>
<p>基本情報技術者試験は、 IT エンジニア向けの試験なので、 IT エンジニア視点の知識が要求されます。</p>
<p>それは、<span class="u">自社のメールサーバから先をどうつなぐか</span>です。</p>
<p>自社のメールサーバは、他社のメールサーバとの間で、 SMTP を使ってメールの送受信を行います。つまり、 IT エンジニア視点では、メールクライアントから自社のメールサーバへの送信が SMTP で受信が POP3 であり、さらに<span class="u">自社のメールサーバと他社のメールサーバとの転送が SMTP</span> なのです。</p>
<figure><figcaption>図　IT エンジニア視点では、 SMTP は送信と転送のプロトコルで、 POP3 は受信プロトコル</figcaption><img class="materialboxed z-depth-5 responsive-width" src="../../wp-content/uploads/2020/11/smtp_pop3.gif" loading="lazy"><br />
</figure>
<h2>SMTP と POP3 に関する午前問題</h2>
<p>ユーザー視点と IT エンジニア視点の違いがわかったところで、 SMTP と POP3 に関する午前問題を解いてみましょう。</p>
<p>以下は、メールクライアントからメールサーバへのメール送信、メールサーバからメールクライアントへのメール受信、およびメールサーバと別のメールサーバの間のメール転送のプロトコルを答える問題です。</p>
<div class="card-panel mag_h30">
問 39　平成 21 年度 春期 午前</p>
<p>図の環境で利用される ① ～ ③ のプロトコルの組合せとして，適切なものはどれか。</p>
<p><img class="materialboxed z-depth-5 responsive-width" src="../../wp-content/uploads/2020/11/image_mail.jpg" loading="lazy"></p>
<table class="centered responsive-width">
<thead>
<tr>
<th></th>
<th>①</th>
<th>②</th>
<th>③</th>
</tr>
</thead>
<tbody>
<tr>
<td>ア</td>
<td>POP3</td>
<td>POP3</td>
<td>SMTP</td>
</tr>
<tr>
<td>イ</td>
<td>POP3</td>
<td>SMTP</td>
<td>POP3</td>
</tr>
<tr>
<td>ウ</td>
<td>SMTP</td>
<td>POP3</td>
<td>SMTP</td>
</tr>
<tr>
<td>エ</td>
<td>SMTP</td>
<td>SMTP</td>
<td>SMTP</td>
</tr>
</table>
</div>
<p>メールクライアントからメールサーバへの ① メール送信は SMTP 、<br />
メールサーバからメールクライアントへの ② メール受信は POP3 、<br />
およびメールサーバと別のメールサーバの間の ③ メール転送は SMTP なので、</p>
<p>選択肢ウが正解です。</p>
<p>&nbsp;</p>
<p>これまでに示した図では、メールの向きを矢印で示していますが、通信のやりとりを考えると、矢印の向きを変えた方がよい部分と、矢印の数を増やした方がよい部分があります。</p>
<p>メールの受信の POP3 では、メールクライアントからの要求がメールサーバに送られるので、矢印の向きは、メールクライアントからメールサーバにするべきです。</p>
<p>メールサーバと別のメールサーバの間は、それぞれが転送元となって相手に要求を送るので、矢印の数を 2 本にするべきです。これらの考えは、後で紹介する午後問題を解くときに、大いに役立ちます。</p>
<figure class="mag_h30"><figcaption>図　通信のやりとりを考えた場合の矢印の向きと数</figcaption><img class="materialboxed z-depth-5 responsive-width" src="../../wp-content/uploads/2020/11/smtp_pop3_rev.gif" loading="lazy"><br />
</figure>
<p><span class="chip mag_rt05">解答</span>　ウ</p>
<h2>SMTP と POP3 に関する午後問題</h2>
<p>今度は、 SMTP と POP3 に関する午後問題です。</p>
<p>基本情報技術者試験の午後問題は、かつて「午前知識の応用問題」と呼ばれていました。先ほどの午前問題は、</p>
<div class="background">
SMTP がメールの送信と転送のプロトコルであり、 POP3 がメールの受信プロトコルである
</div>
<p>というものでした。</p>
<p>以下に示す午後問題は、<span class="bold">「それらの知識がファイアウォールの設定に応用できる」</span>というものです。いかにも午後問題という内容です。</p>
<p>問題の説明文が長いので、ざっと目を通してください。後でポイントとなる部分を説明しますので、ざっとで OK です。</p>
<div class="card-panel mag_h30">
問 4　平成 21 年度 春期 午後（一部抜粋）</p>
<p>　パケットフィルタリングに関する次の記述を読んで，設問 1， 2 に答えよ。</p>
<p>　X 社では，図に示すネットワークを構築し，インターネットへの Webサイトの公開 と電子メール (以下，メールという) の送受信を行っている。</p>
<figure class="mag_h30"><figcaption>図 X　社のネットワーク構成</figcaption><img class="materialboxed z-depth-5 responsive-width" data-caption="図 X　社のネットワーク構成" src="../../wp-content/uploads/2020/11/h21_q4_pm_figure.jpg" loading="lazy"><br />
</figure>
<p>　X 社のネットワークは二つのファイアウォールによって， DMZ 及び社内 LAN の二つのセグメントに分けられている。 Web サーバ，メールサーバ及びデータベースサーバ (以下， DB サーバという)は，それぞれ次の役割を果たしている。</p>
<dl class="mag_h30">
<dt>(1) Web サーバ</dt>
<dd>Web サイトとして，自社の情報をインターネットに公開する。 Web サーバ上では，社外との取引情報を処理するプログラムが動作する。このプログラムが利用するデータは DB サーバ上に格納される。</dd>
<dt>(2) メールサーバ</dt>
<dd>社外とのメールの送受信を行う。また，取引先に対してメールを自動配信するプログラムが動作する。メール配信のためのデータは DB サーバ上に格納される。</dd>
<dt>(3) DB サーバ</dt>
<dd>Web サーバ及びメールサーバで利用するデータを格納する。</p>
<dd>
</dl>
<p>　社内 LAN に接続された管理用 PC からは， SSH を使った各サーバへのログイン操作と，メールサーバを介した外部とのメール送受信が可能である。管理用 PC から自社 Web サーバの参照はできるが，社外 Web サイトの利用は許可されていない。</p>
<p>ネットワーク上で使われるプロトコルとポート番号を表 1 に示す。</p>
<table class="centered mag_h30 responsive-width">
<caption class="grey-text mag_h10">表 1 プロトコルとポート番号</caption>
<thead>
<tr>
<th>サービス</th>
<th>プロトコル</th>
<th>ポート番号</th>
</tr>
</thead>
<tbody>
<tr>
<th>Web</th>
<td>HTTP</td>
<td>80</td>
</tr>
<tr>
<th>メール転送</th>
<td>SMTP</td>
<td>25</td>
</tr>
<tr>
<th>セキュアシェル（遠隔ログイン）</th>
<td>SSH</td>
<td>22</td>
</tr>
<tr>
<th>メール受信</th>
<td>POP3</td>
<td>110</td>
</tr>
<tr>
<th>DB アクセス</th>
<td>DB 専用</td>
<td>1999</td>
</tr>
</tbody>
</table>
<dl>
<dt>設問 1　次の記述中の <span class="blank"></span> に入れる正しい答えを，解答群の中から選べ。解答は重複して選んでもよい。</dt>
<dd>インターネットと DMZ をつなぐファイアウォール A のパケットフィルタリングの設定を表 2 に示す。また， DMZ と社内 LAN をつなぐファイアウォール B のパケットフィルタリングの設定を表 3 に示す。</p>
<p>フィルタリングの設定ルールは，送信元の IP アドレス，あて先の IP アドレス及び接続先ポート番号を指定して通信の許可/拒否を制御する。設定は上の行のルールから調べて，最初に条件が合致した行の動作を実行する。また，応答パケットについては動的フィルタリング機能によって自動的に許可されるので設定は不要なものとする。</dd>
</dl>
<table class="centered responsive-width mag_h30">
<caption class="grey-text mag_h10">表 2 ファイアウォール A のフィルタリングの設定条件</caption>
<thead>
<tr>
<th colspan="3">条件</th>
<th rowspan="2">動作</th>
</tr>
<tr>
<th>送信元</th>
<th>あて先</th>
<th>ポート番号</th>
</tr>
</thead>
<tbody>
<tr>
<td>任意</td>
<td>Webサーバ</td>
<td>80</td>
<td>許可</td>
</tr>
<tr>
<td>任意</td>
<td>メールサーバ</td>
<td>25</td>
<td>許可</td>
</tr>
<tr>
<td><span class="blank">a</span></td>
<td>任意</td>
<td><span class="blank">b</span></td>
<td>許可</td>
</tr>
<tr>
<td>任意</td>
<td>任意</td>
<td>任意</td>
<td>拒否</td>
</tr>
</tbody>
</table>
<table class="centered responsive-width mag_h30">
<caption class="grey-text mag_h10">表 3 ファイアウォール B のフィルタリングの設定条件</caption>
<thead>
<tr>
<th colspan="3">条件</th>
<th rowspan="2">動作</th>
</tr>
<tr>
<th>送信元</th>
<th>あて先</th>
<th>ポート番号</th>
</tr>
</thead>
<tbody>
<tr>
<td>Webサーバ</td>
<td>DB サーバ</td>
<td>1999</td>
<td>許可</td>
</tr>
<tr>
<td>メールサーバ</td>
<td>DB サーバ</td>
<td>1999</td>
<td>許可</td>
</tr>
<tr>
<td>管理用 PC</td>
<td><span class="blank">c</span></td>
<td><span class="blank">d</span></td>
<td>許可</td>
</tr>
<tr>
<td>管理用 PC</td>
<td>メールサーバ</td>
<td>22</td>
<td>許可</td>
</tr>
<tr>
<td>管理用 PC</td>
<td>メールサーバ</td>
<td>25</td>
<td>許可</td>
</tr>
<tr>
<td>管理用 PC</td>
<td>Web サーバ</td>
<td>80</td>
<td>許可</td>
</tr>
<tr>
<td>管理用 PC</td>
<td>Web サーバ</td>
<td>22</td>
<td>許可</td>
</tr>
<tr>
<td>任意</td>
<td>任意</td>
<td>任意</td>
<td>拒否</td>
</tr>
</tbody>
</table>
<p>a，c に関する解答群</p>
<p>ア　DB サーバ　　<br class="hide-on-med-and-up">イ　Web サーバ　　<br class="hide-on-med-and-up">ウ　管理用 PC<br />
エ　メールサーバ　　<br class="hide-on-med-and-up">オ　任意</p>
<p>b，d に関する解答群</p>
<p>ア　22　　イ　25　　ウ　80　　<br class="hide-on-med-and-up">エ　110　　オ　1999
</div>
<p>それでは、ポイントとなる部分を説明しましょう。</p>
<p>問題の内容は、「ファイアウォール A とファイアウォール B のフィルタリングの設定で、空欄となっている部分を埋める」というものです。</p>
<p>空欄 a, b と、空欄 c, d は、どちらも「動作」が「許可」になっています。ファイアウォール A とファイアウォール B にも、もう 1 つ許可しなければならないことがあるのです。</p>
<p>それは、問題の説明文で以下の部分を見ればわかります。</p>
<div class="card-panel mag_h30">
　社内 LAN に接続された<span class="u">管理用 PC</span> からは， SSH を使った各サーバへのログイン操作と，<span class="u">メールサーバを介した外部とのメール送受信が可能である</span>。管理用 PC から自社 Web サーバの参照はできるが，社外 Web サイトの利用は許可されていない。
</div>
<p>管理用 PC は、メールサーバを介した外部とのメール送受信が可能なのですから、</p>
<ul class="background c-round mag_h30">
<li>「管理用 PC 」→「メールサーバ」の SMTP による送信</li>
<li>「管理用 PC 」→「メールサーバ」の POP3 による受信</li>
<li>「メールサーバ」→「外部のメールサーバ」の SMTP による転送</li>
<li>「外部のメールサーバ」→「メールサーバ」の SMTP による転送</li>
</ul>
<p>を許可することになります。プロトコルは、ポート番号で指定され、 SMTP は 25 で、 POP3 は 110 です。この「メールサーバ」は、自社のメールサーバのことです。</p>
<p>&nbsp;</p>
<p>ファイウォール A のフィルタリングの設定を見てみましょう。</p>
<div class="card-panel responsive-width">
<table class="centered">
<caption class="grey-text mag_h10">表 2 ファイアウォール A のフィルタリングの設定条件</caption>
<thead>
<tr>
<th colspan="3">条件</th>
<th rowspan="2">動作</th>
</tr>
<tr>
<th>送信元</th>
<th>あて先</th>
<th>ポート番号</th>
</tr>
</thead>
<tbody>
<tr>
<td>任意</td>
<td>Webサーバ</td>
<td>80</td>
<td>許可</td>
</tr>
<tr class="u">
<td>任意</td>
<td>メールサーバ</td>
<td>25</td>
<td>許可</td>
</tr>
<tr class="u">
<td><span class="blank">a</span></td>
<td>任意</td>
<td><span class="blank">b</span></td>
<td>許可</td>
</tr>
<tr>
<td>任意</td>
<td>任意</td>
<td>任意</td>
<td>拒否</td>
</tr>
</tbody>
</table>
</div>
<ul class="background c-round mag_h30">
<li>「任意」→「メールサーバ」のポート番号 25（ SMTP ）による転送が許可</li>
<li>逆方向の<br />「メールサーバ」→「任意」のポート番号 25（ SMTP ）による転送も許可</li>
</ul>
<p>したがって、空欄 a は「メールサーバ（選択肢エ）」で、空欄 b は「 25 （選択肢イ）」です。</p>
<p>「任意」とは、何らかの通信相手のことであり、ここでは「外部のメールサーバ」です。</p>
<p>&nbsp;</p>
<p>ファイアウォール B のフィルタリングの設定を見てみましょう。</p>
<div class="card-panel responsive-width">
<table class="centered">
<caption class="grey-text mag_h10">表 3 ファイアウォール B のフィルタリングの設定条件</caption>
<thead>
<tr>
<th colspan="3">条件</th>
<th rowspan="2">動作</th>
</tr>
<tr>
<th>送信元</th>
<th>あて先</th>
<th>ポート番号</th>
</tr>
</thead>
<tbody>
<tr>
<td>Webサーバ</td>
<td>DB サーバ</td>
<td>1999</td>
<td>許可</td>
</tr>
<tr>
<td>メールサーバ</td>
<td>DB サーバ</td>
<td>1999</td>
<td>許可</td>
</tr>
<tr>
<td>管理用 PC</td>
<td><span class="blank">c</span></td>
<td><span class="blank">d</span></td>
<td>許可</td>
</tr>
<tr>
<td>管理用 PC</td>
<td>メールサーバ</td>
<td>22</td>
<td>許可</td>
</tr>
<tr>
<td>管理用 PC</td>
<td>メールサーバ</td>
<td>25</td>
<td>許可</td>
</tr>
<tr>
<td>管理用 PC</td>
<td>Web サーバ</td>
<td>80</td>
<td>許可</td>
</tr>
<tr>
<td>管理用 PC</td>
<td>Web サーバ</td>
<td>22</td>
<td>許可</td>
</tr>
<tr>
<td>任意</td>
<td>任意</td>
<td>任意</td>
<td>拒否</td>
</tr>
</tbody>
</table>
</div>
<ul class="background c-round mag_h30">
<li>「管理用 PC 」→「メールサーバ」のポート番号 25（ SMTP ）による送信が許可</li>
<li>「管理用 PC 」→「メールサーバ」のポート番号 110（ POP3 ）による受信も許可</li>
</ul>
<p>したがって、空欄 c は「メールサーバ（選択肢エ）」で、空欄 b は、「 110 （選択肢エ）」です。</p>
<p>「管理用 PC 」→「メールサーバ」のポート番号 22（ SSH ）も許可されていますが、これはメールの送受信ではなく、メールサーバを管理するためにログインするためです。</p>
<p>&nbsp;</p>
<p><span class="chip mag_rt05">解答</span>設問 1　a ― エ、 b ― イ、 c ― エ、 d ― エ</p>
<div class="divider mag_h50"></div>
<p>いかがでしたか？</p>
<p>メールの通知プロトコルである SMTP と POP3 の役割を、しっかりと理解できたでしょう。</p>
<p>この連載では、今後も、多くの受験者が苦手としている用語を取り上げて行きます。それでは、またお会いしましょう！</p><p>The post <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi/mastering_tech/smtp_pop3/">基本情報でわかる SMTP ／ POP3 「ITエンジニア視点で見れば役割がわかる」</a> first appeared on <a href="https://www.seplus.jp/dokushuzemi/ec/fe/fenavi">基本情報技術者試験 受験ナビ｜科目A・科目B対策から過去問解説まで 250本以上の記事を掲載</a>.</p>]]></content:encoded>
			</item>
	</channel>
</rss>
