Sayısal String (keyfi boyutu) ->

3 Cevap php

Benim veritabanı (64-bit tamsayı) BIGINT veri var, çünkü ben bir sorun haline koşuyorum ama ben koşuyorum PHP sürümü sadece 32-bit.

Ben bir tablodan değer çekip Yani ben 10 tabanında bir 64-bit tamsayı temsil eden sayısal bir dize ile bitirmek. Ne ideal yapmak istiyorum bir bit maskesi olarak 64-bit tamsayı kullanmaktır. Yani ya iki 32-bit tamsayı (bir üst kısmı ve bir alt kısmını temsil eden) veya baz 2 sayısal bir dize gitmek gerekir.

Sorun benim PHP sadece 32-bit olduğu için ben sadece çarpın olamaz. Ben sıkışmış muyum?

3 Cevap

İki 32-bitlik tamsayılar 64-bit tamsayı bölmek için MySQL'in bit shift operators kullanabilirsiniz. Yani, sen seçmek olabilir:

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

GMP ve BC Math yöntemleri: keyfi boyutu tamsayılar işlemek için PHP iki seçeneğiniz var.

M.Ö. dizeleri doğrudan kullanır iken ben believe GMP, bazı özel kaynakları kullanarak daha verimli olur.

Bir seferde bir numara (binlerce veya daha fazla) çok işlem olmayacak, doğrudan BC kullanabilirsiniz.

Burada birkaç seçenek var:

  1. Onlar PHP kurulum dahil olup olmadığını kullanın ya BCMath veya GMP. Her ikisi de isteğe bağlı uzunluktaki tam sayı sağlamalıdır.
  2. Yerine 64 karakter uzunluğunda bit dize tamsayı dönüştürmek için veritabanını sor
  3. Bir bignum uygulanması kendiniz yazmak (fazla çalışma :-))