PHPで最小の整数を得る方法

PHP 4.4.0以降およびPHP 5.0.5以降では、最大の整数が定数PHP_INT_MAXとして定義されています。

$ php -r 'var_dump(PHP_INT_MAX);'
int(2147483647)

64bit環境では次のような結果になります。

$ php -r 'var_dump(PHP_INT_MAX);'
int(9223372036854775807)

ところで、最小の整数が必要な場合はどうすればいいのでしょうか。実は最小の整数は定数定義されていないのですが、次のようにすれば取得できます。

$ php -r 'var_dump(~PHP_INT_MAX);'
int(-2147483648)

64ビット環境でも同様です。

$ php -r 'var_dump(~PHP_INT_MAX);'
int(-9223372036854775808)

ここで利用した~というのはビット反転した値を返す単項演算子です。2の補数表現を思い出してください。

  • 最大の整数の2進表現:0111…111
  • 最小の整数の2進表現:1000…000

上記のように、最大の整数をビット反転させれば最小の整数になることがわかります。短く書けてカッコいいと感じたので紹介しました。

Web業界にいるとビット演算と縁遠くなってしまう気がしますけど、エンジニアの基礎体力の一つだと思うので、読めばわかる程度には慣れておいた方がいいと思います。

もちろん、仕事で書くなら次のように書いた方が親切かもしれません。

$ php -r 'var_dump(-PHP_INT_MAX-1);'
int(-2147483648)

PHP_INT_MINをdefineすれば更に親切ですね。

コメント / トラックバックはありません

コメントする