初めて自分の家と他人の家が違う、と意識した時

「ip2long」について教えてください。
マニュアルを見ると「インターネットプロトコルドット表記のアドレスを適当なアドレ スを有する文字列に変換する」とありますが、「適当なアドレ スを有する文字列」とは何なんでしょうか?
以下のソースを実行すると画面に
-800211802
が表示されますが、これが「適当なアドレ スを有する文字列」なのでしょうか?
この文字列は何進数なんでしょうか?

<?php
$ip = gethostbyname('www.example.com');
echo(ip2long($ip));
?>

sprintf("%u", ip2long($ip))
とするとロングIPアドレス(符号無しの 10 進数)になるってことは10進数ではないのでしょうけど・・・

GoogleのIPアドレス 66.249.89.99 だと正の数値 1123637603 が返されます。
正と負の違いはなんなんでしょうか???

宜しくお願いいたします。

A 回答 (1件)

>66.249.89.99 だと正の数値 1123637603


この値を16進変換して全部繋げてそれを10進数に戻してごらん。
正負の違いは2進変換したときの最上位桁が0か1か。その辺りは2進数での正負の表現で調べてね。

この回答への補足

SAYKAさんありがとうございます。

ご教授いただきましたように2つのIPアドレスを変換してみました。


66.249.89.99

↓16進数変換

42F95963

↓10進数変換

1123637603

↓2進数変換

1000010111110010101100101100011


208.77.188.166

↓16進数変換

D04DBCA6

↓10進数変換

3494755494

↓2進数変換

11010000010011011011110010100110

「66.249.89.99」→「1123637603」は納得できるのですが、「208.77.188.166」→「-800211802」は何故なんでしょうか???
「208.77.188.166」→「3494755494」ではないのでしょうか。
2進変換したときの最上位桁は両方とも「1」ですよね?

補足日時:2008/03/21 18:34
    • good
    • 0
この回答へのお礼

「01000010111110010101100101100011」
「11010000010011011011110010100110」
なんですね。。。
理解できました、ありがとうございます。

お礼日時:2008/03/21 20:18

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


おすすめ情報