IPv4アドレスの基数変換(2進数⇔10進数)は、CCNAなどの資格勉強でよく出てきます。
仕事する上では、計算はExcelやらアプリやらで行うのが、ミスがなくて良いと思うけど
計算方法が分かっていた方が理解が深まるし、打合せの場などいざという時に役に立つと思う…
IPv4アドレスは2進数8ビット、4オクテット=32ビットの値で、
10進数で表記される。
※1オクテット = 8bit
192.168.100.1
11000000.10101000.01100100.00000001
・2進数の計算になれる
2進数の桁上がりは2のn乗で加算される
00000001 = 2^0 = 1
00000010 = 2^1 = 2
00000100 = 2^2 = 4
00001000 = 2^3 = 8
00010000 = 2^4 = 16
00100000 = 2^5 = 32
01000000 = 2^6 = 64
10000000 = 2^7 = 127
この8ビットの範囲での最大値は255
10000000 = 128
11000000 = 192
11100000 = 224
11110000 = 240
11111000 = 248
11111100 = 252
11111110 = 254
11111111 = 255
下位ビットからの加算
2進数で下位のビットから加算していくと、「次の上位ビット-1」した数値になる。
例えば、01111111は「次の上位ビット(128)-1」で127とすぐに出てくる。
これは2進数では全てのビットが1になったら桁上がりするルールに基づく。
00000001 = 1
00000011 = 3
00000111 = 7
00001111 = 15
00011111 = 31
00111111 = 63
01111111 = 127
11111111 = 255
間に1個だけ0がある数値
例として11011111をすぐに10進数変換するには、先ほどの2進数の桁上がりを意識すると良い。
この値に1を足すと、11100000となるので、「桁上がりした数値(224)-1」で223になる。
先ほどの組み合わせを覚えていると、計算時間が短くなるが、
それを考慮しない場合は次の計算で求められる。
226を2進数に基数変換する
226/2 = 113・・・余り0
113/2 = 56 ・・・余り1
56/2 = 28 ・・・余り0
28/2 = 14 ・・・余り0
14/2 = 7 ・・・余り0
7/2 = 3 ・・・余り1
3/2 = 1 ・・・余り1
と、解が1もしくは0になるまで除算していき、解1に余りの値を下から足していく
11100010
基数変換できた。
226 - 128 = 98
98 - 64 = 34
34 - 32 = 2
2 - 2 = 0
こちらは解が0になるまで減算していく方法だが、
この時注意が必要なのは引く値は最大ビットから選択する事である。
そうすることで、2進数表記で1がたっているビットだけが、減算式のなかにでてくる
今回は128,64,32,2のビットが1で、それ以外は全て0である。
11100010
今回の10進数226は224に2だけ足した値である。
そのため、前述の組み合わせから224 = 11100000 2 = 00000010
あとは足してやればすぐに求まる。
組み合わせを覚えておくと、パターンに近い値はすぐに求まる。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント