質問

データベースに BIGINT データ (64 ビット整数) があるのに、実行している PHP のバージョンが 32 ビットのみであるため、問題が発生しています。

したがって、テーブルから値を取り出すと、基数 10 の 64 ビット整数を表す数値文字列が得られます。私が理想的にやりたいのは、64 ビット整数をビットマスクとして使用することです。したがって、2 つの 32 ビット整数 (1 つは上位部分を表し、もう 1 つは下位部分を表します) または基数 2 の数値文字列のいずれかに移動する必要があります。

問題は、私の PHP が 32 ビットのみであるため、単純に乗算できないことです。私は行き詰まっていますか?

役に立ちましたか?

解決

あなたはMySQLのビットシフト演算子を使用することができますする 2つの32ビット整数に64ビット整数を分割します。だから、あなたが選択することができます:

select (myBigIntField & 0xffffffff) as lowerHalf,
       (myBigIntField >> 32) as upperHalf

他のヒント

GMP <:

任意のサイズの整数を処理するには、PHPでの2つのオプションがあります/>と BC数学の方法を

I の信じているのBCは、直接文字列を使用しながら、GMPは、いくつかのカスタムリソースを使用することにより、より効率的である。

一度に数字のあまりに多くの(数千人以上)を処理しない場合、

、あなたが直接、BCを使用することができます。

ここにはいくつかのオプションがあります。

  1. どちらかを使用してください BC数学 または GMP PHP インストールに含まれている場合。どちらも任意の長さの整数を提供する必要があります。
  2. 代わりに、整数を 64 文字の長さのビット文字列に変換するようにデータベースに要求します。
  3. bignum 実装を自分で作成します (さらに作業が必要です :-))
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top