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

SAWAI-Shooskay teto @ sa-y.com
2006年 1月 4日 (水) 14:43:24 JST


さわいです。
意地悪すぎ? 意図が 伝わっていないようなので 行間埋めてみます。
> 税所です。
> たびたびありがとうございます。
> 
> [PHP-users 28017]
> > さわいです。
> 
> > > -2147483648 は 0 - 2147483648 ということですが、同様に、
> > > -2147483647 は 1 - 2147483648 ということになると思いますが、
「え? なんで 1から 引くの?」 おなじように 0から 引くでしょ」
「-2147483647 は 0 - 2147483647 ですよ」
「んー じゃ -100くらいだったら どう答えるかなぁ?」
> > じゃ -100 は?

> 2147483548 - 2147483648 です。
がーん・・・ やっぱり 意図が 伝わっていなかったよ

だから -100は

0 - 100
ですよ・・・・


> > > 高木さんの理論ですと、後者もfloatの計算ですから
「あら ここの理解がまちがってるよ・・」
「-n は 0 - n  って 内部で 計算する って 書いてあるのになぁ」
> > > -2147483647 も float ということになってしまいますが、
「n は 2147483647 だから intの範囲にはいってるから」
> > > 実際には -2147483647 は integer ですよね?
「そうそう integer ですよ。」
> > え?
「でも 間違って理解している『-2147483647 は 1 - 2147483648 』理論だと」
「floatになるはず、実際にためしてないのかなぁ、、」
> > var_dump (1-2147483648    );は
> > float(-2147483647) 
> > だよ

さて、
> でも var_dump (-2147483647) は int(-2147483647) ですよね?
そうですよ。
> どうも内部的な話と外部的?な話をゴッチャにされているようですね。
え?そう??
> 「-2147483647」は内部的には「1 - 2147483648」で、
内部的には  0 - 2147483647 ですよ。だから
> 「1 - 2147483648」は float だが、「-2147483647」は integer ですよね、
integerで まちがってないでしょ・・・

> ということなんです、私が申していることは。
> (正しいかどうかは別として。)

ちょっと 角度を変えて 分かりやすい 数字で 説明してみる。

-2 あたりが いいかな?
「-2 」をいう 文字列を 数字に変換するときに PHP君は 0から 2を引いた値を
計算します。2は integer だから 0-2 を CPUを使って integerとして計算します。
だから 結果は integerです。

文字列「-2147483648」を 同じ手順で 数字化するときに 2147483648は 
integerで表現できないので floatで計算します。だから 結果は floatです。


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