tag:crieit.net,2005:https://crieit.net/tags/%E5%9F%BA%E6%95%B0%E5%A4%89%E6%8F%9B/feed 「基数変換」の記事 - Crieit Crieitでタグ「基数変換」に投稿された最近の記事 2020-12-21T08:48:08+09:00 https://crieit.net/tags/%E5%9F%BA%E6%95%B0%E5%A4%89%E6%8F%9B/feed tag:crieit.net,2005:PublicArticle/16360 2020-12-14T17:24:35+09:00 2020-12-21T08:48:08+09:00 https://crieit.net/posts/IPv4 ネットワーク基礎~IPv4アドレスの計算方法~ <h1 id="IPv4アドレスの計算方法"><a href="#IPv4%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%AE%E8%A8%88%E7%AE%97%E6%96%B9%E6%B3%95">IPv4アドレスの計算方法</a></h1> <p>IPv4アドレスの基数変換(2進数⇔10進数)は、CCNAなどの資格勉強でよく出てきます。<br /> <del>仕事する上では、計算はExcelやらアプリやらで行うのが、ミスがなくて良いと思うけど</del><br /> 計算方法が分かっていた方が理解が深まるし、打合せの場などいざという時に役に立つと思う…</p> <h3 id="■IPv4アドレスとは"><a href="#%E2%96%A0IPv4%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%A8%E3%81%AF">■IPv4アドレスとは</a></h3> <p> IPv4アドレスは2進数8ビット、4オクテット=32ビットの値で、<br />  10進数で表記される。<br />  ※1オクテット = 8bit</p> <p> 192.168.100.1<br /> 11000000.10101000.01100100.00000001</p> <p>・2進数の計算になれる<br />  2進数の桁上がりは2のn乗で加算される<br /> 00000001 = 2^0 = 1<br /> 00000010 = 2^1 = 2<br /> 00000100 = 2^2 = 4<br /> 00001000 = 2^3 = 8<br /> 00010000 = 2^4 = 16<br /> 00100000 = 2^5 = 32<br /> 01000000 = 2^6 = 64<br /> 10000000 = 2^7 = 127</p> <h3 id="■組み合わせを覚える"><a href="#%E2%96%A0%E7%B5%84%E3%81%BF%E5%90%88%E3%82%8F%E3%81%9B%E3%82%92%E8%A6%9A%E3%81%88%E3%82%8B">■組み合わせを覚える</a></h3> <p>この8ビットの範囲での最大値は255</p> <ul> <li>上位ビットからの加算<br /> 2進数で上位のビットから加算していくと、下記になる<br /> ※この値はサブネットマスクからプレフィックス値を求めるのに便利なので覚えておく</li> </ul> <p>10000000 = 128<br /> 11000000 = 192<br /> 11100000 = 224<br /> 11110000 = 240<br /> 11111000 = 248<br /> 11111100 = 252<br /> 11111110 = 254<br /> 11111111 = 255</p> <ul> <li><p>下位ビットからの加算<br />  2進数で下位のビットから加算していくと、「次の上位ビット-1」した数値になる。<br />  例えば、01111111は「次の上位ビット(128)-1」で127とすぐに出てくる。<br />  これは2進数では全てのビットが1になったら桁上がりするルールに基づく。<br /> 00000001 = 1<br /> 00000011 = 3<br /> 00000111 = 7<br /> 00001111 = 15<br /> 00011111 = 31<br /> 00111111 = 63<br /> 01111111 = 127<br /> 11111111 = 255</p></li> <li><p>間に1個だけ0がある数値<br />  例として11011111をすぐに10進数変換するには、先ほどの2進数の桁上がりを意識すると良い。<br />  この値に1を足すと、11100000となるので、「桁上がりした数値(224)-1」で223になる。</p> <ul> <li>他よく使う値<br /> 01100000 = 96<br /> 01100100 = 100<br /> 10100000 = 160<br /> 10101100 = 172</li> </ul></li> </ul> <h3 id="■10進数から2進数へ変換"><a href="#%E2%96%A010%E9%80%B2%E6%95%B0%E3%81%8B%E3%82%892%E9%80%B2%E6%95%B0%E3%81%B8%E5%A4%89%E6%8F%9B">■10進数から2進数へ変換</a></h3> <p> 先ほどの組み合わせを覚えていると、計算時間が短くなるが、<br />  それを考慮しない場合は次の計算で求められる。<br />  <br />  226を2進数に基数変換する</p> <h5 id="方法① 教科書通り"><a href="#%E6%96%B9%E6%B3%95%E2%91%A0+%E6%95%99%E7%A7%91%E6%9B%B8%E9%80%9A%E3%82%8A">方法① 教科書通り</a></h5> <p>226/2 = 113・・・余り0<br /> 113/2 = 56 ・・・余り1<br /> 56/2 = 28 ・・・余り0<br /> 28/2 = 14 ・・・余り0<br /> 14/2 = 7 ・・・余り0<br /> 7/2 = 3 ・・・余り1<br /> 3/2 = 1 ・・・余り1</p> <p>と、解が1もしくは0になるまで除算していき、解1に余りの値を下から足していく<br />  11100010<br /> 基数変換できた。</p> <h5 id="方法②上位のビットから最大数を減算していく"><a href="#%E6%96%B9%E6%B3%95%E2%91%A1%E4%B8%8A%E4%BD%8D%E3%81%AE%E3%83%93%E3%83%83%E3%83%88%E3%81%8B%E3%82%89%E6%9C%80%E5%A4%A7%E6%95%B0%E3%82%92%E6%B8%9B%E7%AE%97%E3%81%97%E3%81%A6%E3%81%84%E3%81%8F">方法②上位のビットから最大数を減算していく</a></h5> <p>226 - 128 = 98<br /> 98 - 64 = 34<br /> 34 - 32 = 2<br /> 2 - 2 = 0<br /> こちらは解が0になるまで減算していく方法だが、<br /> この時注意が必要なのは引く値は最大ビットから選択する事である。<br /> そうすることで、2進数表記で1がたっているビットだけが、減算式のなかにでてくる<br /> 今回は128,64,32,2のビットが1で、それ以外は全て0である。<br /> 11100010</p> <h5 id="方法③組み合わせの暗記"><a href="#%E6%96%B9%E6%B3%95%E2%91%A2%E7%B5%84%E3%81%BF%E5%90%88%E3%82%8F%E3%81%9B%E3%81%AE%E6%9A%97%E8%A8%98">方法③組み合わせの暗記</a></h5> <p> 今回の10進数226は224に2だけ足した値である。<br />  そのため、前述の組み合わせから224 = 11100000 2 = 00000010<br />  あとは足してやればすぐに求まる。<br />  組み合わせを覚えておくと、パターンに近い値はすぐに求まる。</p> Nata