<?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/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>エスブレイン &#187; プログラミング講座</title>
	<atom:link href="http://www.esbrain.com/category/%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e8%ac%9b%e5%ba%a7/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.esbrain.com</link>
	<description>高い技術力・創造力・機動力でお客様のビジネスをさらに加速させます</description>
	<lastBuildDate>Wed, 25 Aug 2010 07:34:27 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.esbrain.com/category/%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e8%ac%9b%e5%ba%a7/feed/" />
		<item>
		<title>HTMLとは?</title>
		<link>http://www.esbrain.com/2009/04/html%e3%81%a8%e3%81%af/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</link>
		<comments>http://www.esbrain.com/2009/04/html%e3%81%a8%e3%81%af/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 02:44:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[タグ]]></category>

		<guid isPermaLink="false">http://www.esbrain.com/?p=235</guid>
		<description><![CDATA[HTMLとは、HyperText Markup Language(ハイパーテキストマークアップ言語)の略です。
HyperText(ハイパーテキスト)とは、ある文章から別の文章にジャンプ（リンク）することができる文章のこ [...]]]></description>
			<content:encoded><![CDATA[<p>HTMLとは、HyperText Markup Language(ハイパーテキストマークアップ言語)の略です。</p>
<p>HyperText(ハイパーテキスト)とは、ある文章から別の文章にジャンプ（リンク）することができる文章のことです。</p>
<p>そのような文章を書くための言語が、HTMLなのです。</p>
<p>HTMLは、主にホームページの文章を記述するために使用されていますが、</p>
<p>別に普段の文章をHTMLで記述しても構いません。</p>
<p>HTMLは、文章はもちろん、別文章へのリンク先や画像表示などすべてをテキストで記述します。</p>
<p>よって、編集はテキストエディタでもでき、構造もシンプルです。</p>
<p>マイクロソフトワードがなくても、綺麗な手紙を書くこともできます。</p>
<p>文字の大きさを変更したり、リンク先を指定したりするために「タグ」という特殊な記号を記述します。</p>
<p>HTMLファイルに含まれるのは、表示する文字とタグだけです。</p>
<p>タグについて理解すれば、HTMLを書くことができます。</p>
<p>一番シンプルなHTMLを書いてみましょう。</p>
<p>テキストエディタを開いてください。</p>
<p>Windowsであれば、ノートパッドで結構です。</p>
<p>テキストエディタで以下の文章を入力し、hello.htmlというファイル名で保存してください。</p>
<p>ノートパッドの場合、保存の時にファイル形式を「すべて」としてから保存してください。</p>
<pre class="brush: xml;">
&lt;html&gt;
&lt;body&gt;
hello!
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>hello.htmlというファイルが出来上がったら、そのファイルをクリックしてください。</p>
<p>ブラウザが開いて、画面にhello!と表示されます。</p>
<p>&lt;と&gt;で囲んだものを「タグ」と呼びます。</p>
<p>１つのタグは必ず&lt;で始まり、修飾を指示する記号と指示内容が続き、&gt;で終わります。</p>
<p>修飾はすべてタグで記述するのです。</p>
<p>タグは基本的には画面に表示されません。</p>
<p>また、タグには始まりと終わりがあります。</p>
<p>タグによる修飾は、始まりのタグと終わりのタグの間に記述した内容だけが影響されます。</p>
<p>終わりのタグは、開始タグで指示した記号の前に/をつけます。</p>
<p>hello.htmlでは、&lt;html&gt;が開始のタグで、&lt;/html&gt;が終わりのタグです。</p>
<p>&lt;html&gt;〜&lt;/html&gt;のことを、「エイチティーエムエルタグで囲む」と呼びます。</p>
<p>始まりのタグと終わりのタグの間には、さらにタグを書くこともできます。</p>
<p>&lt;html&gt;〜&lt;/html&gt;の間に&lt;body&gt;〜&lt;/body&gt;がありますね。</p>
<p>このことを「入れ子」とか「ネスト」と呼びます。</p>
<p>入れ子によって、段階的に修飾を指定できるのです。</p>
<p>文字の大きさや色、表示位置などの修飾はすべてタグで指定できます。</p>
<p>ひたすら文章とタグを書けば、美しい文章が出来上がります。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.esbrain.com/2009/04/html%e3%81%a8%e3%81%af/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.esbrain.com/2009/04/html%e3%81%a8%e3%81%af/" />
	</item>
		<item>
		<title>０と１だけでどうやってプログラムをつくるのか</title>
		<link>http://www.esbrain.com/2008/12/%ef%bc%90%e3%81%a8%ef%bc%91%e3%81%a0%e3%81%91%e3%81%a7%e3%81%a9%e3%81%86%e3%82%84%e3%81%a3%e3%81%a6%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%82%92%e3%81%a4%e3%81%8f%e3%82%8b%e3%81%ae%e3%81%8b/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</link>
		<comments>http://www.esbrain.com/2008/12/%ef%bc%90%e3%81%a8%ef%bc%91%e3%81%a0%e3%81%91%e3%81%a7%e3%81%a9%e3%81%86%e3%82%84%e3%81%a3%e3%81%a6%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%82%92%e3%81%a4%e3%81%8f%e3%82%8b%e3%81%ae%e3%81%8b/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 05:07:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[プログラミング講座]]></category>
		<category><![CDATA[2進数]]></category>

		<guid isPermaLink="false">http://web.esbrain.net/?p=66</guid>
		<description><![CDATA[コンピュータが扱うのは０と１だけと繰り返し伝えてきました。
数字だけでどうやってコンピュータに指示するんだ？
この疑問は誰でも持つのです。
ここが理解できれば、コンピュータの頭脳（CPU)を理解することになります。
実は [...]]]></description>
			<content:encoded><![CDATA[<p>コンピュータが扱うのは０と１だけと繰り返し伝えてきました。</p>
<p>数字だけでどうやってコンピュータに指示するんだ？</p>
<p>この疑問は誰でも持つのです。</p>
<p>ここが理解できれば、コンピュータの頭脳（CPU)を理解することになります。</p>
<p>実は、数字の羅列の中には命令コードと呼ばれる数字と、その命令を実行するために</p>
<p>必要なデータとしての数字の2種類あるのです。</p>
<p>「命令＋データ」が１つの組み合わせとなって、多数並べてプログラムとして動くのです。</p>
<p>（一部データが不要な命令もあります）</p>
<p>しかし、命令もデータも同じ数字ですので、一見区別できません。</p>
<p>また、数字がずれた場合、CPUはどのようにずれたか分かりませんので、無理やり実行しようとして暴走します。</p>
<p>ゲーム機が突然変な画面になって止まるのは、この様な理由からです。</p>
<p>CPUがプログラムを実行するためのルールは以下の通りです。</p>
<ol>
<li>命令として数字を取り出す。</li>
<li>命令によって、処理に必要なデータの数が分かるので、その個数分の数字を取り出す。</li>
<li>命令を実行する。</li>
<li>１に戻って繰り返す。</li>
</ol>
<p>たったこれだけです。</p>
<p>簡単なCPUを仮想的に作って処理させてみましょう。</p>
<p>シンプル1号というCPUを作ってみます。</p>
<p>このCPUは８ビット単位で処理します。</p>
<p>よって、命令の種類は最大で２５６個となります。</p>
<p>8ビットの数字を管理できる箱を１つ持っています。</p>
<p>計算はこの箱を使って行います。</p>
<p>この箱のことをアキュムレータ(以下ACC)と呼びます。</p>
<table border="1">
<tbody>
<tr>
<th>命令を表す数字(16進数)</th>
<th>命令内容</th>
<th>必要なデータ数</th>
</tr>
<tr>
<td>00h</td>
<td>ACCに、データの数字を代入する</td>
<td>1</td>
</tr>
<tr>
<td>01h</td>
<td>ACCに、データの数字を加える</td>
<td>1</td>
</tr>
<tr>
<td>FEh</td>
<td>画面にACCの内容を表示する</td>
<td>0</td>
</tr>
<tr>
<td>FFh</td>
<td>CPUの動作を停止する</td>
<td>0</td>
</tr>
</tbody>
</table>
<p>3種類の命令しか持っていません。</p>
<p>では、プログラムを作ってみます。</p>
<p>００h　１４h　０１h　３Fh　FEh　FFh</p>
<p>たった5つの数字です。</p>
<p>では、シンプル1号に処理させてみましょう。</p>
<p>まず、００hを取り出し、命令表と比較すると、命令番号００hが見つかります。</p>
<p>必要なデータ数は１つですので、次の数値１４hを取り出します。</p>
<p>この数値をACCに代入し、この命令の処理は終わります。（ACC＝１４h）</p>
<p>次に、０１hを取り出し、命令表と比較すると、滅入れ番号０１hが見つかります。</p>
<p>必要なデータ数は１つですので、次の数値３Fhを取り出します。</p>
<p>この数値をACCに加え、この命令の処理は終わります。（ACC=１４h+３Fh＝５３h)</p>
<p>FEhを取り出し、命令表と比較すると命令番号FEhが見つかります。</p>
<p>必要なデータ数は０なので、データは取り出さず命令を実行します。</p>
<p>画面に５３hと表示し、この命令の処理は終わります。</p>
<p>FFhを取り出し、命令表と比較すると命令番号FFhが見つかります。</p>
<p>必要なデータ数は0なので、データは取り出さず命令を実行します。</p>
<p>CPUは動作を停止します。</p>
<p>以上でCPUの動作が完了します。</p>
<p>見事に8ビットの数字の羅列だけでプログラムが実行できましたね！</p>
<p>実際のCPUには数多くの命令がありますが、処理内容の基本はシンプル1号とまったく同じなのです。</p>
<p>テストとして、シンプル1号をJavaScriptで実現しました。</p>
<p>試してみてください。</p>
<script type="text/javascript">
var acc = 0;
var cpuRunning = true;
var program = [];
var opcodes = {
  0x00: {
    comment: "ACCにデータの数字を代入します",
    oplands: 1,
    func: function(oplands) { acc=oplands.pop(); }
  },
  0x01: {
    comment: "ACCにデータの数字を加えます",
    oplands: 1,
    func: function(oplands) { acc += oplands.pop(); }
  },
  0xFE: {
    comment: "ACCの内容を画面に表示します",
    oplands: 0,
    func: function(oplands) { return "アキュムレータの内容は"+acc+"です"; }
  },
  0xFF: {
    comment: "CPUの処理を停止します",
    oplands: 0,
    func: function(oplands) { cpuRunning = false; }
  }
};
function SimpleNo1()
{
  var getData = function()
  {
    if(ip < 0 || ip >= program.length) {
      throw Error("CPUはプログラムの範囲外に飛び出し、暴走しました(異常終了)");
    }
    return program[ip++];
  };

  var toHex = function( n )
  {
    var str16 = "0123456789ABCDEF";
    n = Number(n);
    var hi = Math.floor(n / 16);
    var lo = n % 16;
    return str16.substr(hi, 1)+str16.substr(lo, 1);
  } 

  program = [];
  document.cpu.output.value = "プログラムコード投入\n";
  var prg = new String(document.cpu.program.value);
  prg = prg.replace(/^\s+|\s+$/g, "");
  var tokens = prg.split(/\s+/);
  for(var i = 0; i < tokens.length; i++) {
    var hexCode = tokens[i];
    if(!hexCode.match(/^[0-9A-Fa-f]{2}/)) {
      document.cpu.output.value += "プログラムコード異常("+hexCode+") 異常終了\n";
      return;
    }
    program.push(parseInt(hexCode, 16));
  }

  document.cpu.output.value += "CPU起動\n";
  var ip = 0;
  cpuRunning = true;
  document.cpu.output.value += "CPU初期化完了\n";

  try {
    while(cpuRunning) {
      var opcode = getData();
      document.cpu.output.value += "命令コードを取り出し("+toHex(opcode)+")\n";
      var op = opcodes[opcode];
      if(op == null) {
        throw new Error("命令表にない命令(コード"+toHex(opcode)+")を実行しようとし、暴走しました(異常終了)");
      }
      var opl = [];
      document.cpu.output.value += op.comment + "\n";
      document.cpu.output.value += "必要データ数は"+op.oplands+"バイトです\n";
      for(var i = 0; i < op.oplands; i++) {
        var d = getData();
        document.cpu.output.value += "データを取り出し("+toHex(d)+")\n";
        opl.push(d);
      }
      document.cpu.output.value += "実行します\n";
      var output = op.func(opl);
      if(output != null) {
        document.cpu.output.value += "実行結果:"+output+"\n";
      }
    }
    document.cpu.output.value += "正常終了!\n";
  }
  catch(e) {
    document.cpu.output.value += e.message+"\n";
  }
}
</script>
<div style="border: 1px solid black;">
<form name="cpu" id="cpu">
プログラム:<input type="text" size="50" name="program" value="00 14 01 3F FE FF"/><br/>
※16進数を1バイトずつスペースで区切って入力してください。<br/>
<input type="button" value="実行" onclick="SimpleNo1();"/><br/>
<hr/>
実行結果<br/>
<textarea name="output" cols="50" rows="10"></textarea></br/>
</form>
</div>

<pre class="brush: jscript;">

&lt;script type=&quot;text/javascript&quot;&gt;
var acc = 0;
var cpuRunning = true;
var program = [];
var opcodes = {
0x00: {
comment: &quot;ACCにデータの数字を代入します&quot;,
oplands: 1,
func: function(oplands) { acc=oplands.pop(); }
},
0x01: {
comment: &quot;ACCにデータの数字を加えます&quot;,
oplands: 1,
func: function(oplands) { acc += oplands.pop(); }
},
0xFE: {
comment: &quot;ACCの内容を画面に表示します&quot;,
oplands: 0,
func: function(oplands) { return &quot;アキュムレータの内容は&quot;+acc+&quot;です&quot;; }
},
0xFF: {
comment: &quot;CPUの処理を停止します&quot;,
oplands: 0,
func: function(oplands) { cpuRunning = false; }
}
};
function SimpleNo1()
{
var getData = function()
{
if(ip &lt; 0 || ip &gt;= program.length) {
throw Error(&quot;CPUはプログラムの範囲外に飛び出し、暴走しました(異常終了)&quot;);
}
return program[ip++];
};

var toHex = function( n )
{
var str16 = &quot;0123456789ABCDEF&quot;;
n = Number(n);
var hi = Math.floor(n / 16);
var lo = n % 16;
return str16.substr(hi, 1)+str16.substr(lo, 1);
}

program = [];
document.cpu.output.value = &quot;プログラムコード投入\n&quot;;
var prg = new String(document.cpu.program.value);
prg = prg.replace(/^\s+|\s+$/g, &quot;&quot;);
var tokens = prg.split(/\s+/);
for(var i = 0; i &lt; tokens.length; i++) {
var hexCode = tokens[i];
if(!hexCode.match(/^[0-9A-Fa-f]{2}/)) {
document.cpu.output.value += &quot;プログラムコード異常(&quot;+hexCode+&quot;) 異常終了\n&quot;;
return;
}
program.push(parseInt(hexCode, 16));
}

document.cpu.output.value += &quot;CPU起動\n&quot;;
var ip = 0;
cpuRunning = true;
document.cpu.output.value += &quot;CPU初期化完了\n&quot;;

try {
while(cpuRunning) {
var opcode = getData();
document.cpu.output.value += &quot;命令コードを取り出し(&quot;+toHex(opcode)+&quot;)\n&quot;;
var op = opcodes[opcode];
if(op == null) {
throw new Error(&quot;命令表にない命令(コード&quot;+toHex(opcode)+&quot;)を実行しようとし、暴走しました(異常終了)&quot;);
}
var opl = [];
document.cpu.output.value += op.comment + &quot;\n&quot;;
document.cpu.output.value += &quot;必要データ数は&quot;+op.oplands+&quot;バイトです\n&quot;;
for(var i = 0; i &lt; op.oplands; i++) {
var d = getData();
document.cpu.output.value += &quot;データを取り出し(&quot;+toHex(d)+&quot;)\n&quot;;
opl.push(d);
}
document.cpu.output.value += &quot;実行します\n&quot;;
var output = op.func(opl);
if(output != null) {
document.cpu.output.value += &quot;実行結果:&quot;+output+&quot;\n&quot;;
}
}
document.cpu.output.value += &quot;正常終了!\n&quot;;
}
catch(e) {
document.cpu.output.value += e.message+&quot;\n&quot;;
}
}
&lt;/script&gt;
&lt;div style=&quot;border: 1px solid black;&quot;&gt;
&lt;form name=&quot;cpu&quot; id=&quot;cpu&quot;&gt;
プログラム:&lt;input type=&quot;text&quot; size=&quot;50&quot; name=&quot;program&quot; value=&quot;00 14 01 3F FE FF&quot;/&gt;&lt;br/&gt;
※16進数を1バイトずつスペースで区切って入力してください。&lt;br/&gt;
&lt;input type=&quot;button&quot; value=&quot;実行&quot; onclick=&quot;SimpleNo1();&quot;/&gt;&lt;br/&gt;
&lt;hr/&gt;
実行結果&lt;br/&gt;
&lt;textarea name=&quot;output&quot; cols=&quot;50&quot; rows=&quot;10&quot;&gt;&lt;/textarea&gt;&lt;/br/&gt;
&lt;/form&gt;
&lt;/div&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.esbrain.com/2008/12/%ef%bc%90%e3%81%a8%ef%bc%91%e3%81%a0%e3%81%91%e3%81%a7%e3%81%a9%e3%81%86%e3%82%84%e3%81%a3%e3%81%a6%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%82%92%e3%81%a4%e3%81%8f%e3%82%8b%e3%81%ae%e3%81%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.esbrain.com/2008/12/%ef%bc%90%e3%81%a8%ef%bc%91%e3%81%a0%e3%81%91%e3%81%a7%e3%81%a9%e3%81%86%e3%82%84%e3%81%a3%e3%81%a6%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%82%92%e3%81%a4%e3%81%8f%e3%82%8b%e3%81%ae%e3%81%8b/" />
	</item>
		<item>
		<title>２進数とは　〜０と１だけじゃ長すぎ〜</title>
		<link>http://www.esbrain.com/2008/12/%ef%bc%92%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%af%e3%80%80%e3%80%9c%ef%bc%90%e3%81%a8%ef%bc%91%e3%81%a0%e3%81%91%e3%81%98%e3%82%83%e9%95%b7%e3%81%99%e3%81%8e%e3%80%9c/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</link>
		<comments>http://www.esbrain.com/2008/12/%ef%bc%92%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%af%e3%80%80%e3%80%9c%ef%bc%90%e3%81%a8%ef%bc%91%e3%81%a0%e3%81%91%e3%81%98%e3%82%83%e9%95%b7%e3%81%99%e3%81%8e%e3%80%9c/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 04:23:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[プログラミング講座]]></category>
		<category><![CDATA[2進数]]></category>

		<guid isPermaLink="false">http://web.esbrain.net/?p=64</guid>
		<description><![CDATA[2進数については、既に山を越えています。
ここまで大変だったかもしれません。
この講義で2進数は最後です。
よかったですね。
今まで2進数を用いて数を表現してきましたが、桁数が多くなるし、
０と１しか使わないので見た目に [...]]]></description>
			<content:encoded><![CDATA[<p>2進数については、既に山を越えています。</p>
<p>ここまで大変だったかもしれません。</p>
<p>この講義で2進数は最後です。</p>
<p>よかったですね。</p>
<p>今まで2進数を用いて数を表現してきましたが、桁数が多くなるし、</p>
<p>０と１しか使わないので見た目に間違いやすいのです。</p>
<p>そこで、16進数を使います。</p>
<p>２の4乗は１６なので、非常に変換しやすいのです。</p>
<p>2進数4桁を16進数1桁にするだけです。</p>
<p>けど、16進数の数を表す記号って何だ？と思われるでしょう。</p>
<p>実は、０から９まではそのまま使い、１０〜１５まではA,B,C,D,E,Fをそれぞれ割り当てます。</p>
<p>まとめたものが、次のようになります。2進数は絶対値表現です。</p>
<table border="1">
<tbody>
<tr>
<th>10進数</th>
<th>2進数</th>
<th>16進数</th>
</tr>
<tr>
<td>0</td>
<td>0000　0000</td>
<td>0</td>
</tr>
<tr>
<td>1</td>
<td>0000　0001</td>
<td>1</td>
</tr>
<tr>
<td>2</td>
<td>0000　0010</td>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td>0000　0011</td>
<td>3</td>
</tr>
<tr>
<td>4</td>
<td>0000　0100</td>
<td>4</td>
</tr>
<tr>
<td>5</td>
<td>0000　0101</td>
<td>5</td>
</tr>
<tr>
<td>6</td>
<td>0000　0110</td>
<td>6</td>
</tr>
<tr>
<td>7</td>
<td>0000　0111</td>
<td>7</td>
</tr>
<tr>
<td>8</td>
<td>0000　1000</td>
<td>8</td>
</tr>
<tr>
<td>9</td>
<td>0000　1001</td>
<td>9</td>
</tr>
<tr>
<td>10</td>
<td>0000　1010</td>
<td>A</td>
</tr>
<tr>
<td>11</td>
<td>0000　1011</td>
<td>B</td>
</tr>
<tr>
<td>12</td>
<td>0000　1100</td>
<td>C</td>
</tr>
<tr>
<td>13</td>
<td>0000　1101</td>
<td>D</td>
</tr>
<tr>
<td>14</td>
<td>0000　1110</td>
<td>E</td>
</tr>
<tr>
<td>15</td>
<td>0000　1111</td>
<td>F</td>
</tr>
<tr>
<td>16</td>
<td>0001　0000</td>
<td>10</td>
</tr>
<tr>
<td>255</td>
<td>1111　1111</td>
<td>FF</td>
</tr>
<tr>
<td>256</td>
<td>1 0000 0000</td>
<td>100</td>
</tr>
</tbody>
</table>
<p>2進数の4桁毎にまとめるだけなので、簡単ですよね？</p>
<p>16進数から2進数への変換はその逆に16進数1桁を2進数4桁に変換していくだけなので、これも簡単です。</p>
<p>2進数の数字をまとめるのには、16進数が非常に簡単なので、コンピュータのプログラミングには16進数を使って表現します。</p>
<p>16進数2桁が1バイト（8ビット）になるので、これを基本として用います。</p>
<p>そして、16進数の数を人が区別つけるために、数字の後にh(hexadecimal)を付けます。</p>
<p>10hは、10進数では１６を意味します。</p>
<p>2進数8桁が、16進数2桁になるだけで、グッと実用度が増しましたね！</p>
<p>皆さんもドンドン16進数を使ってください。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.esbrain.com/2008/12/%ef%bc%92%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%af%e3%80%80%e3%80%9c%ef%bc%90%e3%81%a8%ef%bc%91%e3%81%a0%e3%81%91%e3%81%98%e3%82%83%e9%95%b7%e3%81%99%e3%81%8e%e3%80%9c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.esbrain.com/2008/12/%ef%bc%92%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%af%e3%80%80%e3%80%9c%ef%bc%90%e3%81%a8%ef%bc%91%e3%81%a0%e3%81%91%e3%81%98%e3%82%83%e9%95%b7%e3%81%99%e3%81%8e%e3%80%9c/" />
	</item>
		<item>
		<title>２進数とは　〜０より小さい数を０と１で表す？〜</title>
		<link>http://www.esbrain.com/2008/12/%ef%bc%92%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%af%e3%80%80%e3%80%9c%ef%bc%90%e3%82%88%e3%82%8a%e5%b0%8f%e3%81%95%e3%81%84%e6%95%b0%e3%82%92%ef%bc%90%e3%81%a8%ef%bc%91%e3%81%a7%e8%a1%a8%e3%81%99%ef%bc%9f/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</link>
		<comments>http://www.esbrain.com/2008/12/%ef%bc%92%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%af%e3%80%80%e3%80%9c%ef%bc%90%e3%82%88%e3%82%8a%e5%b0%8f%e3%81%95%e3%81%84%e6%95%b0%e3%82%92%ef%bc%90%e3%81%a8%ef%bc%91%e3%81%a7%e8%a1%a8%e3%81%99%ef%bc%9f/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 04:23:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[プログラミング講座]]></category>
		<category><![CDATA[2進数]]></category>

		<guid isPermaLink="false">http://web.esbrain.net/?p=62</guid>
		<description><![CDATA[いよいよ2進数の山場です。
やっぱり、マイナスの値（負数）を表現できないと、計算ではこまりますよね。
普段私たちは「ー」という記号を使って表現します。
５のマイナス値はー５となります。
2進数でも「ー」という記号を使って [...]]]></description>
			<content:encoded><![CDATA[<p>いよいよ2進数の山場です。</p>
<p>やっぱり、マイナスの値（負数）を表現できないと、計算ではこまりますよね。</p>
<p>普段私たちは「ー」という記号を使って表現します。</p>
<p>５のマイナス値はー５となります。</p>
<p>2進数でも「ー」という記号を使って負数を表現することはできます。</p>
<p>例えば１０b（2進数の１０と言う意味です）であれば、ー１０bとすればよいのです。</p>
<p>ところが、コンピュータは０と１しか使えないという制限があるため、「ー」という記号を追加することができないのです。</p>
<p>こんなにもコンピュータと言うのは融通が利かないのかと腹を立てる人もいるかも知れませんが、どうしようもありません。</p>
<p>では、０と１だけで”どうやって”負数を表すのか？　実はトリックがあるのです。</p>
<p>10進数の世界では、４４に５６を加えると１００になります。</p>
<p>この時、「私たちは2桁の数字までしか考えない」と宣言すれば、１００のうち2桁の数字は「００」つまり０となります。</p>
<p>「正の数字同士を足したのに０になる」</p>
<p>これがトリックです。</p>
<p>４４は正の数ですが、５６は実はー４４と考えるのです。</p>
<p>編に深く考えないでください。ー４４を数字だけで表現すると５６となると決めただけです。</p>
<p>では、なぜ５６か？</p>
<p>先ほどの足し算の式を入れ替えると、</p>
<p>１００ー４４＝５６</p>
<p>となります。これがトリックの中身です。</p>
<p>１００は「０」としたのですから、上の式は次のように表すことができます。</p>
<p>０ー４４＝５６</p>
<p>５６は４４より大きい数なのに、ー４４と同じ意味になるというトリック。</p>
<p>ある基準の数字（この場合は１００）からどれだけ足りないかという表現方法を「補数」といいます。</p>
<p>つまり、４４の１００の補数は５６なのです。</p>
<p>納得出来ないですか?</p>
<p>数字遊びと同じです。そのように「扱う」と遊びのルールを決めただけのことです。</p>
<p>トランプゲームのブラックジャックのように、Aを１か１１として扱えるルールみたいなものです。</p>
<p>ただし、補数にはもう1つのルールがあります。</p>
<p>扱える数字の範囲が制限されるのです。</p>
<p>１００を基準に考えると、正の数50種類と負の数50種類の計１００通りが扱えることになり、<br />
ー５０〜＋４９までの数字（０を含めて１００通り）しか使えません。<br />
負数の補数表現の表をご覧ください。</p>
<table border="0">
<tbody>
<tr>
<th>表現したい数字</th>
<th>表現したい数字</th>
<th>補数表現</th>
</tr>
<tr>
<td>-1</td>
<td>99</td>
</tr>
<tr>
<td>-2</td>
<td>98</td>
</tr>
<tr>
<td>-3</td>
<td>97</td>
</tr>
<tr>
<td>-4</td>
<td>96</td>
</tr>
<tr>
<td>-5</td>
<td>95</td>
</tr>
<tr>
<td>-6</td>
<td>94</td>
</tr>
<tr>
<td>-7</td>
<td>93</td>
</tr>
<tr>
<td>-8</td>
<td>92</td>
</tr>
<tr>
<td>-9</td>
<td>91</td>
</tr>
<tr>
<td>-10</td>
<td>90</td>
</tr>
<tr>
<td>-20</td>
<td>80</td>
</tr>
<tr>
<td>-30</td>
<td>70</td>
</tr>
<tr>
<td>-40</td>
<td>60</td>
</tr>
<tr>
<td>-50</td>
<td>50</td>
</tr>
</tbody>
</table>
<p>この様に、ー１〜ー５０までの５０通りを５０〜９９で表現し、０〜４９までの50通りを０〜４９（そのまま）で表現するのです。</p>
<p>「９９」はー１となるという考えは、皆さんの生活では扱いにくいかもしれませんが、</p>
<p>コンピュータによってはとても助かるのです。</p>
<p>「引き算」という考えを捨てることができるからです。</p>
<p>ー１＋１０と言う式は、補数表現では９９＋１０となります。</p>
<p>結果は１０９ですが、下2桁しか取りませんから、９となり計算はあっています。</p>
<p>ー５０〜＋４９までの範囲内というルールの中では、引き算は不要となるのです。</p>
<p>ただし、掛け算は注意が必要です。２０x20という式は、それぞれ範囲内ですが、</p>
<p>計算結果の４００は範囲外ですから、計算できないことになります。</p>
<p>これもルールです。では、実際のコンピュータはどうしてるかって？</p>
<p>基準となる数字が十分大きければ問題ないのです。</p>
<p>最近のコンピュータは32ビットが基本ですから、基準となる数字は２３２乗つまり4,294,964,296を基準にします。</p>
<p>すると、-2,147,483,648〜+2,147,483,647までの数字が扱えるのです。</p>
<p>約21億まで扱えれば、普通の計算であれば問題ないはずですよね。</p>
<p>まだ足りない？</p>
<p>そんな時は、６４ビットで計算するのです。CPUは32ビットでも、６４ビットで計算できるのです。</p>
<p>ちなみに、６４ビットでは18,446,744,073,709,551,616を基準にしますので、</p>
<p>ー9,223,372,036,854,775,808〜＋9,223,372,036,854,775,807までの数字が扱えます。</p>
<p>これなら足りるでしょ?</p>
<p>という途方もない数字の後に恐縮ですが、コンピュータが扱う2進数で表すとどうなるのでしょうか?</p>
<p>１バイト（8ビット）を基準に考えてみます。</p>
<p>８ビットは２の8乗ですから、２５６種類、ー１２８〜＋１２７までの数字が扱えることとなります。<br />
2進数でのこのルールを「2の補数」表現と呼びます。</p>
<table border="0">
<tbody>
<tr>
<th>10進数の数字</th>
<th>256の補数</th>
<th>2の補数表現</th>
</tr>
<tr>
<td>-1</td>
<td>255</td>
<td>11111111</td>
</tr>
<tr>
<td>-2</td>
<td>254</td>
<td>11111110</td>
</tr>
<tr>
<td>-3</td>
<td>253</td>
<td>11111101</td>
</tr>
<tr>
<td>-4</td>
<td>252</td>
<td>11111100</td>
</tr>
<tr>
<td>-5</td>
<td>251</td>
<td>11111011</td>
</tr>
<tr>
<td>-6</td>
<td>250</td>
<td>11111010</td>
</tr>
<tr>
<td>-7</td>
<td>249</td>
<td>11111001</td>
</tr>
<tr>
<td>-8</td>
<td>248</td>
<td>11111000</td>
</tr>
<tr>
<td>-9</td>
<td>247</td>
<td>11110111</td>
</tr>
<tr>
<td>-10</td>
<td>246</td>
<td>1110110</td>
</tr>
<tr>
<td>-127</td>
<td>129</td>
<td>10000001</td>
</tr>
<tr>
<td>-128</td>
<td>128</td>
<td>10000000</td>
</tr>
</tbody>
</table>
<p>この様に、2の補数表現を用いることで０と1だけでも負の数を表すことができるのです。</p>
<p>ただし、ここで注意が必要です。11111111bとだけ書かれている場合に、「ー１」なのか「＋２５５」</p>
<p>なのかは、判別できないということです。</p>
<p>したがって、2の補数表現なのか、絶対値表現（常に正の数）なのかはあらかじめルールとして</p>
<p>決めておく必要があります。</p>
<p>ここが重要ですので、よく覚えておいてください。</p>
<p>2の補数表現で記載した負の数を見ると、1つ特徴があります。</p>
<p>一番上位のビットが必ず1なのです。</p>
<p>よって、2の補数表現の数字は、見た目で負数か正数かが判断できて、便利です。</p>
<p>今日はここまで。</p>
<p>(参考）</p>
<p>2の補数表現では、一番上位のビットが１か０かで正負が分かりました。</p>
<p>それなら、上位1ビットを符号ビット（正負）として考えれば、</p>
<p>わざわざ２５６から引かなくても良いのではないかと考える方もいらっしゃるでしょう。</p>
<p>その通りです。</p>
<p>ルールとして、上位1ビットを符号ビットとして、以下7ビットは絶対値として書けば、</p>
<p>-127〜+127まで表現できます。この方が人にはわかりやすいです。</p>
<p>ー１は10000001bとなります。</p>
<p>ー１２７は11111111bとなります。</p>
<p>この表現方法を「１の補数」表現と呼びます。</p>
<p>非常にわかりやすいですね。</p>
<p>ですが、コンピュータにとっては面倒なのです。</p>
<p>まず、-0と+0が存在してしまいます。</p>
<p>つまり00000000bと10000000bです。</p>
<p>そして、計算する時には先頭の1ビットを見て、足し算か引き算かを判断し、計算しなければなりません。</p>
<p>2の補数表現では、何も考えずに足し算すれば計算できます。</p>
<p>1の補数表現は計算の手順が増え面倒なのです。</p>
<p>こんな理由から、現在のコンピュータでは負数を表現するのに、2の補数を用います。</p>
<p>ただし、本日の重要ポイントのとおり、2進数の数を絶対値（正の数のみ）で扱うか、2の補数表現で</p>
<p>扱うかは、使う人（つまりあなた）の自由ですよ。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.esbrain.com/2008/12/%ef%bc%92%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%af%e3%80%80%e3%80%9c%ef%bc%90%e3%82%88%e3%82%8a%e5%b0%8f%e3%81%95%e3%81%84%e6%95%b0%e3%82%92%ef%bc%90%e3%81%a8%ef%bc%91%e3%81%a7%e8%a1%a8%e3%81%99%ef%bc%9f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.esbrain.com/2008/12/%ef%bc%92%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%af%e3%80%80%e3%80%9c%ef%bc%90%e3%82%88%e3%82%8a%e5%b0%8f%e3%81%95%e3%81%84%e6%95%b0%e3%82%92%ef%bc%90%e3%81%a8%ef%bc%91%e3%81%a7%e8%a1%a8%e3%81%99%ef%bc%9f/" />
	</item>
		<item>
		<title>2進数とは 〜10進数との関係〜</title>
		<link>http://www.esbrain.com/2008/12/2%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%af-%e3%80%9c10%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%ae%e9%96%a2%e4%bf%82%e3%80%9c/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</link>
		<comments>http://www.esbrain.com/2008/12/2%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%af-%e3%80%9c10%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%ae%e9%96%a2%e4%bf%82%e3%80%9c/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 04:22:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[プログラミング講座]]></category>
		<category><![CDATA[2進数]]></category>

		<guid isPermaLink="false">http://web.esbrain.net/?p=59</guid>
		<description><![CDATA[2進数とは０と１で出来ていることは、ここまでの講義を受講された方はお分かりのことだと思います。
そろそろコンピュータ寄りの内容にしていきましょう。
いきなり結論ですが、現在一般的に使用しているコンピュータは０と１しか使え [...]]]></description>
			<content:encoded><![CDATA[<p>2進数とは０と１で出来ていることは、ここまでの講義を受講された方はお分かりのことだと思います。</p>
<p>そろそろコンピュータ寄りの内容にしていきましょう。</p>
<p>いきなり結論ですが、現在一般的に使用しているコンピュータは０と１しか使えません。</p>
<p>究極な2進論者です。</p>
<p>じゃあ、文字や画像や数字の「ー」はどうするんだ？という疑問が出てくれば、筆者は嬉しいです。</p>
<p>「それでもコンピュータは０と１しか使えない」</p>
<p>ガリレオの名ゼリフのようにはいきませんが、これは絶対の制限なのです。</p>
<p>しっかりと覚えておいてください。</p>
<p>そろそろ本題です。</p>
<p>電卓もコンピュータです。しかも0と1しか使えません。</p>
<p>しかし、10進数の計算をすることができます。</p>
<p>実は2進数と10進数はお互いに変換することができます。（一部を除いては・・・）</p>
<p>この作業を基数変換と言います。</p>
<p>ますは、2進数から10進数の変換。</p>
<p>ある2進数の数字を１１０１bとします。</p>
<p>bとは、2進数の数字であると、わかりやすくするための記号です。コンピュータの中では使用されません。</p>
<p>あくまで、人が10進数と間違えないようにする記号です。</p>
<p>先ほどの数字を10進数に変換します。</p>
<ol>
<li>1桁目に１を掛けます。</li>
<li>2桁目に2を掛けます。</li>
<li>3桁目に4を掛けます。</li>
<li>4桁目に8を掛けます。</li>
<li>上4つの計算で出た数字を足します。</li>
</ol>
<p>これで10進数の数字になります。</p>
<p>つまり、（１x１）＋（０x2)＋（１x４）＋（１x8)＝１３です。</p>
<p>１０１１bは１３なのです。</p>
<p>4ビットの2進数をすべて10進数にしたものが以下の表です。</p>
<ol>
<li>0000b = 0</li>
<li>0001b = 1</li>
<li>0010b = 2</li>
<li>0011b = 3</li>
<li>0100b = 4</li>
<li>0101b = 5</li>
<li>0110b = 6</li>
<li>0111b = 7</li>
<li>1000b = 8</li>
<li>1001b = 9</li>
<li>1010b = 10</li>
<li>1011b = 11</li>
<li>1100b = 12</li>
<li>1101b = 13</li>
<li>1110b = 14</li>
<li>1111b = 15</li>
</ol>
<p>5ビット以上の2進数はどうやって変換すればよいのでしょうか?</p>
<p>さきほどの変換方法を見ると、１つ桁が増えると2を掛ける数が１つ増えることが分かります。</p>
<p>「ｎ桁目の変換には２の（ｎー１）乗を掛ける」　（ｎは1以上の数字）</p>
<p>と言うのが正しいです。</p>
<p>5桁目であれば２の４乗となり、２x2x2x2＝１６です。</p>
<p>ちなみに0乗は１です。</p>
<p>これだけ覚えておけば、2進数から10進数への変換はできます。</p>
<p>では、10進数から2進数の変換です。</p>
<p>小さな数であれば、上の変換表を見て変換することも出来ますが、大きな数字の場合どうでしょうか？</p>
<p>この様な場合、割り算をして変換を行います。</p>
<p>たとえば、２３４を2進数に変換してみましょう。</p>
<p>元の10進数の数字を、０になるまでひたすら2で割ります。その時の余りを記録します。</p>
<p>２３４÷２＝１１７　（余り０）</p>
<p>１１７÷２＝　５８　（余り１）</p>
<p>５８÷２＝　２９　（余り０）</p>
<p>２９÷２＝　１４　（余り１）</p>
<p>１４÷２＝　　７　（余り０）</p>
<p>７÷２＝　　３　（余り１）</p>
<p>３÷２＝　　１　（余り１）</p>
<p>１÷２＝　　０　（余り１）</p>
<p>この式の余りの部分をしたから上に書いたもの、つまり１１１０１０１０が、２３４の2進数です。</p>
<p>軽く騙されてるような気分ですよね。</p>
<p>では、逆に2進数から10進数に変換し直して、正しいかどうか確認しましょう。</p>
<p>それぞれの桁に２のｎー１乗を掛けてすべてを足します。</p>
<p>（０x１）＋（１x２）＋（０x4)+(1&#215;8)+(０x1６）＋（１x32)＋（１x64)＋（１x128)</p>
<p>どうですか？</p>
<p>２３４になりましたよね？</p>
<p>2進数と10進数の変換はこれで完成です。</p>
<p>何かすっきりしない人は以下を読んでください。</p>
<p>（基数変換の考え）</p>
<p>現在私たちが使う数字は位取り記数法という法則を使っています。</p>
<p>前にお話ししたとおり、ある基数の種類の記号を使って表現し、数があふれると桁を増やす方法です。</p>
<p>10進数であれば、０〜９までの10種類の記号を使い、９の次には1桁増やして１０となります。</p>
<p>10種類の記号のことを底と言います。</p>
<p>2進数であれば、０と１を底と呼びます。</p>
<p>そこで、ある数を桁毎に分解してみます。</p>
<p>１２３４と言う10進数の数字は　１x10<sup>３</sup> ＋　２x１０<sup>２</sup> ＋　３x10<sup>1</sup> +　４x１０<sup>０</sup> と分解できます。</p>
<p>基数変換とは、使っている記号を変えるだけのことです。</p>
<p>この話の時だけ、2進数の記号を０＝○,１＝■と置き換えます。（こうしないと、理解しにくいのです）</p>
<p>上の例で使用している数字は、０、１、２、３、４、１０です。</p>
<p>これを2進数（AB表記）で表すと、それぞれ○、■、■○、■■、■○○、■○■○となります。</p>
<p>（10進数の１０は2進数では１０１０bですよね？　だから■○■○となります）</p>
<p>１x10<sup>３</sup> ＋　２x１０<sup>２</sup> ＋　３x10<sup>1</sup> +　４x１０<sup>０</sup></p>
<p>は2進数表記にすると以下になります。</p>
<p>■x■○■○<sup>■■</sup> + ■○x■○■○<sup>■○</sup> + ■■x■○■○<sup>■</sup> + ■○○x■○■○<sup>○</sup></p>
<p>■○■○の○乗は、■です。</p>
<p>■○■○の■乗は、■○■○です。</p>
<p>■○■○の■○乗は、■○■○を2乗することですから、計算してみましょう。</p>
<div style="width: 200px; text-align: right;">■○■○<br />
x■○■○</p>
<hr />○○○○<br />
■○■○○<br />
○○○○○○<br />
■○■○○○○</p>
<hr />■■○○■○○</div>
<p>よって、■○■○の■○乗は■■○○■○○です。</p>
<p>■○■○の■■乗は、■■○○■○○に、さらに■○■○を掛けたものです。</p>
<div style="width: 200px; text-align: right;">■■○○■○○<br />
x　　　　■○■○</p>
<hr />○○○○○○○<br />
■■○○■○○○<br />
○○○○○○○○○<br />
■■○○■○○○○○</p>
<hr />■■■■■○■○○○</div>
<p>よって、■○■○の■■乗は、■■■■■○■○○○です。</p>
<p>やっと準備が出来ました。これを先ほどの式から計算していきます。</p>
<p>■x■○■○<sup>■■</sup> + ■○x■○■○<sup>■○</sup> + ■■x■○■○<sup>■</sup> + ■○○x■○■○<sup>○</sup></p>
<p>＝■x■■■■■○■○○○　＋　■○x■■○○■○○　+　■■x■○■○　＋　■○○</p>
<p>＝■■■■■○■○○○　+　■■○○■○○○　+　■■■■○　+　■○○</p>
<p>＝■○○■■○■○○■○</p>
<p>10進数の１２３４は、2進数では■○○■■○■○○■○となるのです。</p>
<p>０と１にすると、１００１１０１００１０bです。</p>
<p>この様に、表現する記号を置き換えることが基数変換なのです。</p>
<p>このやり方は、どんな基数への変換でも同じです。</p>
<p>ただ、この方式は計算が面倒なので、実際には使いません。</p>
<p>スッキリしましたか?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.esbrain.com/2008/12/2%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%af-%e3%80%9c10%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%ae%e9%96%a2%e4%bf%82%e3%80%9c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.esbrain.com/2008/12/2%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%af-%e3%80%9c10%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%ae%e9%96%a2%e4%bf%82%e3%80%9c/" />
	</item>
		<item>
		<title>2進数とは（３）　〜　ビットとかバイトって聞くよね　〜</title>
		<link>http://www.esbrain.com/2008/11/2%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%af%ef%bc%88%ef%bc%93%ef%bc%89%e3%80%80%e3%80%9c%e3%80%80%e3%83%93%e3%83%83%e3%83%88%e3%81%a8%e3%81%8b%e3%83%90%e3%82%a4%e3%83%88%e3%81%a3%e3%81%a6%e8%81%9e%e3%81%8f/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</link>
		<comments>http://www.esbrain.com/2008/11/2%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%af%ef%bc%88%ef%bc%93%ef%bc%89%e3%80%80%e3%80%9c%e3%80%80%e3%83%93%e3%83%83%e3%83%88%e3%81%a8%e3%81%8b%e3%83%90%e3%82%a4%e3%83%88%e3%81%a3%e3%81%a6%e8%81%9e%e3%81%8f/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 02:59:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[プログラミング講座]]></category>
		<category><![CDATA[2進数]]></category>

		<guid isPermaLink="false">http://web.esbrain.net/?p=47</guid>
		<description><![CDATA[2進数について、3回目の講義になりました。
だんだん飽きてきてると思いますので、ちょっと計算は止めましょう。
新聞ではほぼ毎日「1ギガビットDRAM価格が急落」とかのニュースが出てますね。
そんなニュースに興味ない？
そ [...]]]></description>
			<content:encoded><![CDATA[<p>2進数について、3回目の講義になりました。<br />
だんだん飽きてきてると思いますので、ちょっと計算は止めましょう。</p>
<p>新聞ではほぼ毎日「1ギガビットDRAM価格が急落」とかのニュースが出てますね。<br />
そんなニュースに興味ない？<br />
それでは、「インテルが最新６４ビットCPUを発表」という記事くらいは、この講義を見てくれている人なら<br />
読んだことあるでしょう。</p>
<p>このビット、実は2進数の１桁のことを表しています。<br />
英文字では、bitです。<br />
つまり０、１のどちらか1桁の数字を入れることができる箱と考えられます。<br />
DRAMと言うメモリはダイナミック・ランダム・アクセス・メモリの略でして、パソコンのメインメモリとして使われています。<br />
このメモリの箱の数が1ギガ分あるということになります。<br />
じゃ、ギガってなに？ってことになりますが、これは単位です。<br />
メモリで使われる単位は、キロ、メガ、ギガ、テラなどがあります。<br />
肉の1キログラムは１０００グラムですよね。<br />
つまり、１０００を1キロとまとめています。<br />
コンピュータの世界では2進数を使うので、１０００という10進数は使いにくい。<br />
そこで、キロは２の10乗を示します。</p>
<p>２の10乗は、10進数の１０２４となり、10進数の１０００に近いのです。<br />
メガは２の２0乗、つまり１,０４８,５７６を示します。単位を表す文字は大文字のMです。<br />
ギガは２の30乗となり、１,０７３,７４１,８２４を示します。単位を表す文字は大文字のGです。<br />
最近はハードディスクの容量に１TBとかかれた物も出てきました。<br />
これは、予想通り２の40乗となります。</p>
<p>よって、1ギガビットDRAMというのは、約10億個の0か1を入れる箱を持っていることになります。<br />
指先の大きさにとんでもない数の箱を持つことが出きるなんて、技術の進歩はスゴいですね！</p>
<p>しかし、ここで話は終わりません。<br />
皆さんのパソコンに入っているメインメモリは、１GBと書かれていませんか?<br />
この大文字の「B」はビットを示していませんし、皆さんは「イチギガバイト」と読んでいますよね。<br />
その通り、Bはバイト（Bytes)の略称です。<br />
かならず、大文字のBを使います。<br />
ビットは小文字のbを使います。<br />
なぜ、バイトがあるのでしょうか？<br />
ビットは０、１を1つ入れる箱を示します。<br />
しかし、普段1つの箱ごとに使うのでは、効率が悪い。<br />
そこで、最低限8個のビットをまとめて1バイトと呼ぶようにしたのです。</p>
<p>8bit = 1Byte</p>
<p>この式にしたがうと、１GBは８Gビットと言えます。<br />
つまり、約８６億個弱（8,589,93,592個)のビットの箱を持っているパソコンということになるんです。<br />
途方もない数字ですね。</p>
<p>筆者が小さいころは、パソコンには３２KBのメインメモリが入っていました。<br />
これは、３２x8x1024＝26,2144個分の箱です。<br />
２５年のうちに、メモリは３２７６８倍増えたのです。<br />
それだけ大量な情報を扱うことができることにはなったのですが、OSが・・・<br />
とこの辺で今回はおしまい。</p>
<p>『講義のまとめ』<br />
1.ビットは０、１を表す箱のことである<br />
2.8ビットは1バイトである<br />
3.バイトの記号は大文字のBである<br />
4.キロ、メガ、ギガなどの単位は、2の何とか乗という単位をまとめたもの</p>
]]></content:encoded>
			<wfw:commentRss>http://www.esbrain.com/2008/11/2%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%af%ef%bc%88%ef%bc%93%ef%bc%89%e3%80%80%e3%80%9c%e3%80%80%e3%83%93%e3%83%83%e3%83%88%e3%81%a8%e3%81%8b%e3%83%90%e3%82%a4%e3%83%88%e3%81%a3%e3%81%a6%e8%81%9e%e3%81%8f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.esbrain.com/2008/11/2%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%af%ef%bc%88%ef%bc%93%ef%bc%89%e3%80%80%e3%80%9c%e3%80%80%e3%83%93%e3%83%83%e3%83%88%e3%81%a8%e3%81%8b%e3%83%90%e3%82%a4%e3%83%88%e3%81%a3%e3%81%a6%e8%81%9e%e3%81%8f/" />
	</item>
		<item>
		<title>2進数とは（２）　〜　数字ですからもちろん計算できます　〜</title>
		<link>http://www.esbrain.com/2008/11/2%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%af%ef%bc%88%ef%bc%92%ef%bc%89%e3%80%80%e3%80%9c%e3%80%80%e6%95%b0%e5%ad%97%e3%81%a7%e3%81%99%e3%81%8b%e3%82%89%e3%82%82%e3%81%a1%e3%82%8d%e3%82%93%e8%a8%88%e7%ae%97/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</link>
		<comments>http://www.esbrain.com/2008/11/2%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%af%ef%bc%88%ef%bc%92%ef%bc%89%e3%80%80%e3%80%9c%e3%80%80%e6%95%b0%e5%ad%97%e3%81%a7%e3%81%99%e3%81%8b%e3%82%89%e3%82%82%e3%81%a1%e3%82%8d%e3%82%93%e8%a8%88%e7%ae%97/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 02:19:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[プログラミング講座]]></category>
		<category><![CDATA[2進数]]></category>

		<guid isPermaLink="false">http://web.esbrain.net/?p=42</guid>
		<description><![CDATA[2進数は０と１で表現できる数字であることは、前回お伝えしました。
そして、数字なら算数で計算できるわけです。
ちょっとやってみましょう。
■足し算（加算）
一番大切な計算です。
なんとファミコンに搭載されているCPUは足 [...]]]></description>
			<content:encoded><![CDATA[<p>2進数は０と１で表現できる数字であることは、前回お伝えしました。<br />
そして、数字なら算数で計算できるわけです。<br />
ちょっとやってみましょう。</p>
<p>■足し算（加算）<br />
一番大切な計算です。<br />
なんとファミコンに搭載されているCPUは足し算、引き算、掛け算、割り算のうち、足し算しか出来ません。<br />
じゃどうやって計算するの？と言う疑問がでれば、あなたの脳は2進数に興味が出てきた証拠です。<br />
１０ー５を計算するとき、１０から５を”引く”から引き算になるのですが、１０からー５を”足す”ことに発想を<br />
変えると、足し算だけでできるのです。<br />
そして、掛け算は足し算の繰り返しだし、割り算では、引き算の繰り返しでできるのです。<br />
しかし、そんな重要な足し算も、実は論理演算というさらに基本的な演算の組み合わせでできていることになります。<br />
その話は次回。</p>
<p>では、さっそく足し算してみましょう。<br />
普段足し算とほとんど同じですが、気をつけなければならないのは、この2進数の世界では、「２」以上の数字は<br />
使えません。０と１だけです。</p>
<p>１＋０＝１<br />
０＋１＝１</p>
<p>簡単ですね！</p>
<p>では、１＋１の時はどうなるのでしょうか？<br />
10進数の計算では、５＋５の時、1桁繰り上がって１０となりますね。<br />
これとまったく同じです。</p>
<p>１＋１＝１０</p>
<p>これだけ知っていれば、2進数の計算はできたも同然です。<br />
下の問題はどうでしょうか?</p>
<p>１０１０＋０１０１＝？</p>
<p>答えは、１１１１です。桁上がりがないため、簡単です。<br />
では、次はどうでしょう？</p>
<p>００１１＋０１１０＝？</p>
<p>桁上がりしましたよね。<br />
答えは１００１です。</p>
<p>最後の問題です。<br />
１１１１＋１１１１＝？</p>
<p>全部の桁に1があるので、桁上がりしっぱなしです。<br />
答えは、4桁に収まりません。<br />
１１１１０です。</p>
<p>どうでしょうか？<br />
重要な計算ですので、マスターしてください。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.esbrain.com/2008/11/2%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%af%ef%bc%88%ef%bc%92%ef%bc%89%e3%80%80%e3%80%9c%e3%80%80%e6%95%b0%e5%ad%97%e3%81%a7%e3%81%99%e3%81%8b%e3%82%89%e3%82%82%e3%81%a1%e3%82%8d%e3%82%93%e8%a8%88%e7%ae%97/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.esbrain.com/2008/11/2%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%af%ef%bc%88%ef%bc%92%ef%bc%89%e3%80%80%e3%80%9c%e3%80%80%e6%95%b0%e5%ad%97%e3%81%a7%e3%81%99%e3%81%8b%e3%82%89%e3%82%82%e3%81%a1%e3%82%8d%e3%82%93%e8%a8%88%e7%ae%97/" />
	</item>
		<item>
		<title>2進数とは（１）　〜　考え方をシンプルにします　〜</title>
		<link>http://www.esbrain.com/2008/11/2%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%af%ef%bc%88%ef%bc%91%ef%bc%89%e3%80%80%e3%80%9c%e3%80%80%e8%80%83%e3%81%88%e6%96%b9%e3%82%92%e3%82%b7%e3%83%b3%e3%83%97%e3%83%ab%e3%81%ab%e3%81%97%e3%81%be%e3%81%99/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</link>
		<comments>http://www.esbrain.com/2008/11/2%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%af%ef%bc%88%ef%bc%91%ef%bc%89%e3%80%80%e3%80%9c%e3%80%80%e8%80%83%e3%81%88%e6%96%b9%e3%82%92%e3%82%b7%e3%83%b3%e3%83%97%e3%83%ab%e3%81%ab%e3%81%97%e3%81%be%e3%81%99/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 06:58:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[プログラミング講座]]></category>
		<category><![CDATA[2進数]]></category>

		<guid isPermaLink="false">http://web.esbrain.net/?p=33</guid>
		<description><![CDATA[人に「プログラム書けます」と言うには、まず2進数を知らなければなりません。
これをしっかり理解できてないままJavaScriptやVBScriptなどを書く人が急増し、困った状況になっています。
ちゃんと2進数を理解しま [...]]]></description>
			<content:encoded><![CDATA[<p>人に「プログラム書けます」と言うには、まず2進数を知らなければなりません。<br />
これをしっかり理解できてないままJavaScriptやVBScriptなどを書く人が急増し、困った状況になっています。<br />
ちゃんと2進数を理解しましょう。<br />
普段私たちが物を数えるときは10進数を使います。</p>
<p>０、１、２、３、４、５、６、７、８、９、１０</p>
<p>はい、ここで10だけが2桁あります。<br />
進数とは、1桁だけで表せる数字の種類に相当します。<br />
０〜９までが1桁ですので、数字は10種類あり、つまり10進数と言えます。<br />
9を越えると桁が増え、また０〜９の繰り返しになります。さらに９９を越えると桁が増え、ずっと続きます。<br />
つまり、2進数とは、1桁で表せる数字の種類が2種類しかないってことです。<br />
2種類で表せることは身の回りにいっぱいあります。</p>
<table border="1">
<tr>
<td>コインの</td>
<td>表</td>
<td>裏</td>
</tr>
<tr>
<td>スイッチの</td>
<td>ON</td>
<td>OFF</td>
</tr>
<tr>
<td>チョコレートが</td>
<td>好き</td>
<td>嫌い</td>
</tr>
<tr>
<td>問題が</td>
<td>分かる</td>
<td>分からない</td>
</tr>
<tr>
<td>AとBを足した結果が</td>
<td>10以上</td>
<td>10未満</td>
</tr>
</table>
<p>こんな風に2種類で表すことを数字で使うと、2進数となります。<br />
実際コンピュータの世界では、2進数を使用します。<br />
物事を2つに分けるために、電圧の違いによって2進数を表現しているからです。<br />
上の例では、スイッチのON/OFFというのを、電圧の高さの違いによって2つに分けています。<br />
2進数を知ることは、コンピュータの動作原理を知ることにつながるわけです。</p>
<p>では、2進数についてもう少し勉強を進めましょう。<br />
たとえば、コインの表は０、裏は１として使えそうです。<br />
この様に実生活の「2種類の事柄」を数字に置き換えて利用できるようになると、<br />
「コンピュータが分かってきた！」と言う実感を得られます。<br />
「2種類の事柄」はコンピュータを理解するために一番大切なことですから、死ぬまで覚えておいてください。<br />
では０、１だけで何をするのでしょうか・・・<br />
もちろん数字として扱うことは出来ます。</p>
<p>０、１、１０、１１、１００、１０１、１１０、１１１、１０００</p>
<p>０と１しか使わないため、すぐに桁が上がっていきますね。<br />
不便なので、私たちは普段の生活では、2進数は使いません。<br />
よって、数として使うだけでは、別に数字にしなくても言い訳ですが、<br />
コンピュータは2進数を使います。これについては、次回説明します。<br />
2進数は、いくつかの事柄の組み合わせをまとめて考えるときに威力を発揮します。</p>
<p>性格について考えてみましょう。<br />
今、性格の分類が4種類あるとします。</p>
<p>1.外交的・内向的<br />
2.短気・気長<br />
3.冷静的・情熱的<br />
4.思考派・行動派</p>
<p>それぞれ左側を０、右側を１とします。<br />
すると、内向的で、気長、冷静的で思考派の人は上から順に１１００となります。<br />
よって、影のリーダー格的な人物は、１１００と表現することが出来ます。<br />
逆に目立ちたがりのリーダーは、その逆に００１１と表現出来るのではないでしょうか。<br />
正反対のことは何も考えずに０と１を逆にすれば良いことになります。<br />
やっと、2進数の良さが見えてきましたね！<br />
ここで重要なポイント。１１００のそれぞれの桁の意味を知っていなければ意味がありません。<br />
０と１でしか表現していないため、別の意味の数字になることもあるということです。<br />
ここも非常に重要です！それぞれの桁に意味があり、それは数字だけでは分からないということです。<br />
しかし、意味さえ知っていれば、大変短い情報で様々な組み合わせをまとめることが出来ます。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.esbrain.com/2008/11/2%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%af%ef%bc%88%ef%bc%91%ef%bc%89%e3%80%80%e3%80%9c%e3%80%80%e8%80%83%e3%81%88%e6%96%b9%e3%82%92%e3%82%b7%e3%83%b3%e3%83%97%e3%83%ab%e3%81%ab%e3%81%97%e3%81%be%e3%81%99/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.esbrain.com/2008/11/2%e9%80%b2%e6%95%b0%e3%81%a8%e3%81%af%ef%bc%88%ef%bc%91%ef%bc%89%e3%80%80%e3%80%9c%e3%80%80%e8%80%83%e3%81%88%e6%96%b9%e3%82%92%e3%82%b7%e3%83%b3%e3%83%97%e3%83%ab%e3%81%ab%e3%81%97%e3%81%be%e3%81%99/" />
	</item>
	</channel>
</rss>
