[PHP-users 28016] Re: 整数の下限

SAISHO Kazuhiro ml @ saisho.info
2006年 1月 4日 (水) 13:24:40 JST


税所です。
優しいご回答をありがとうございます。(^^;

[PHP-users 28010]
> 高木です。

> PHP 内部では、-2147483648 は (0 - 2147483648) と解釈されるようです。
> 2147483648 は int 型の範囲を超えているので float として扱われ、int と 
> float の演算結果が float として扱われているということでしょう(*2)。

32ビット符号なし整数 0〜4294967295 を 2147483648(31ビット)分シフトして
符号ありにしているということなのではないでしょうか?
この場合の「2147483648」とシフトした結果の「2147483648」では
意味が異なるのではないでしょうか?
-2147483648 は 0 - 2147483648 ということですが、同様に、
-2147483647 は 1 - 2147483648 ということになると思いますが、
高木さんの理論ですと、後者もfloatの計算ですから
-2147483647 も float ということになってしまいますが、
実際には -2147483647 は integer ですよね?
私の認識違いでしたらご指摘ください。


> 実は私も税所さんのメールを読むまでこのことは知りませんでした。「学習中」
> とのことですので、私がどのようにして調べたのかを簡単に説明しておきます。
> 
> 0. 実際に税所さんの書かれたコードを動かしてみて、おっしゃられるような
>    動きをすることを確認した
> 1. マニュアルの「型」関連のページにひととおり目を通した(*3)。
> 2. http://bugs.php.net/search.php (PHP のバグ検索ページ) に行った。
> 3. キーワードに "2147483648 int float" を指定し、その下のチェック
>    ボックスで「all」を選択して「Search」ボタンを押した
> 4. 検索結果一覧のページから、怪しそうなものを調べてみた
> 5. http://bugs.php.net/bug.php?id=24381 を見つけた
> 6. ↑のコメントから http://bugs.php.net/bug.php?id=14134 を見つけた
> 
> といった流れです。参考になりましたでしょうか?
> 
> (*1) http://www.php.net/manual/ja/language.types.integer.php
> (*2) http://www.php.net/manual/ja/language.types.type-juggling.php
> (*3) http://www.php.net/manual/ja/language.types.php

たいへん参考になりました。
ここまでして戴いて恐縮です。
バグ検索ページのことは知りませんでしたので
今後は質問の前に検索するように致します。

ところで私の行動履歴も記しておきますと次のとおりでした。
0. http://www.php.net/manual/ja/language.types.integer.php で学習中に
   自分のプラットフォームの整数の範囲を調べようとして、質問したような
   現象に遭遇。
1. 過去ログ http://ns1.php.gr.jp/mailman/namazu.cgi?idxname=php-users
   で「-2147483648」をキーワードにして検索、9件ヒットしたが解決せず。
2. Yahoo!で「-2147483648」をキーワードにして検索、ヒットなし。
3. 本MLで質問させて戴く。
4. 高木さんからバグ検索ページを教えて戴く。

どうもありがとうございました。
今後も宜しくお願い致します。

--
税所 一弘 <ml @ saisho.info>



PHP-users メーリングリストの案内