アプリ版:「スタンプのみでお礼する」機能のリリースについて

IPアドレス:172.16.1.20
サブネットマスク:255.255.255.128の場合

・ある問題集で、16進数を使って上のIPアドレスからネットワークアドレスを求める場合に、

(1).IPアドレスを16進数→    AC 10 01  14
(2).サブネットマスクを16進数→FF FF FF 80 
                 ---------
(3).ネットワークアドレス→   AC 10  01 00
                           ~~
 という感じで解答していたのですが、どうやって求めたのか分かりません。(3)の左から6桁と一番右は、(1)と(2)を比較して小さい方をとっていますが、右から2番目だけは1と8を比較して0となっているのはなぜでしょうか?教えてください。

A 回答 (6件)

#5の補足に対して。



> その問題集には「2進数でもよいが桁が大きくなりすぎるので16進数での演算に慣れるように。」と、あったのですが16進数のままでANDをとる方法はないのでしょうか?

そもそも、論理演算自身が1ビットに対して行う演算なので2進数で演算するのが基本です。
255D(=0xff)だとか128D(=0x80)のような「わかりやすい」値ならともかく、変なビットの並びであれば16進数で計算するより2進数で計算する方がよっぽど「自然」です。

その証としてこれまでの回答者の皆さんは、2進数に直して計算する方法で解説していますし、あなた自身も16進数で?だったことが2進数で理解できました。
10進数を16進数に直すには10進数→2進数→16進数とするのが普通です(計算しやすい)。2進数が出た時点で論理演算するのが得策です。なぜなら、2進数→16進数の変換が要らない上に、16進数の方が論理演算しにくいのですから。


その問題集は、問題を解くだけのための解説に陥ってます。
    • good
    • 0
この回答へのお礼

ありがとうございました。
へたに特別な方法を覚えずに今までどおり地道に2進数でやるようにします。 

お礼日時:2005/07/17 10:19

必要なbitだけを取り出すのに、ANDの演算をします。


16進数を2進数に戻し、各bit毎にANDの演算をしているだけです。

それ以上の説明が必要であれば、もう少し手前から勉強をし直すこと。

以上(^o^)。

この回答への補足

ご回答ありがとうございました。
 その問題集には「2進数でもよいが桁が大きくなりすぎるので16進数での演算に慣れるように。」と、あったのですが16進数のままでANDをとる方法はないのでしょうか?

補足日時:2005/07/17 09:30
    • good
    • 0

参考URLを参考にすると良いかもしれません。



参考URL:http://mt-net.vis.ne.jp/ADFE_mail/0212.htm
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。教えていただいたことを今後の勉強に役立てたいと思います。

お礼日時:2005/07/17 10:22

16進で考えると分かりにくいかもしれません。


実際にはこれらの演算は2進で行われますので、2進数に変換してみます。

すると、
(1)10101100 00010000 00000001 00010100
(2)11111111 11111111 11111111 10000000
ですので、この2つのANDを取ると
(3)10101100 00010000 00000001 00000000
となります。

これを16進に戻すと最初の答えになります。
サブネットマスクとはホストアドレスの上位何ビットかをマスクして、サブネットアドレスとホストアドレスに分割するために使用するものなので、一度2進数に変換して考えていただければ分かりやすいと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。教えていただいたことを今後の勉強に役立てたいと思います。

お礼日時:2005/07/17 10:22

AND演算は、ビット単位の演算です。

比較する双方のビットが1の時のみ1になります。どちらか片方
または双方共に0なら演算結果は0です。
さて、(1)、(2) は、2進数で書くと

(1) 1010 1100 0001 0000 0000 0001 0001 0100
(2) 1111 1111 1111 1111 1111 1111 1000 0000

となり、各ビットをAND演算すると

(3) 1010 1100 0001 0000 0000 0001 0000 0000

となり、16進表現で AC 10 01 00 となります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。教えていただいたことを今後の勉強に役立てたいと思います。

お礼日時:2005/07/17 10:22

2進に直して考えるとわかりやすいのでは?



80は10000000ですので。
14は00010100です。
これでかければ下の方の10100が消えるのがわかると思いますが。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。教えていただいたことを今後の勉強に役立てたいと思います。

お礼日時:2005/07/17 10:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!