ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.3878196 PHP「ip2long」について
質問者:kyouju 「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 が返されます。
正と負の違いはなんなんでしょうか???

宜しくお願いいたします。
困り度:
  • 困っています
質問投稿日時:
08/03/20 03:15

回答

ANo.1 >66.249.89.99 だと正の数値 1123637603
この値を16進変換して全部繋げてそれを10進数に戻してごらん。
正負の違いは2進変換したときの最上位桁が0か1か。その辺りは2進数での正負の表現で調べてね。
回答者:SAYKA
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
08/03/20 05:20
この回答への補足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」ですよね?
この回答へのお礼「01000010111110010101100101100011」
「11010000010011011011110010100110」
なんですね。。。
理解できました、ありがとうございます。