2012-08-16 10 views
7

Come utilizzare% correttamente per non ottenere risultati negativi?php% (funzione mod) diventa negativo su numeri grandi. Come liberarsene?

<?php 
    $x = 1103515246*12345; 
    echo $x." ".decbin($x)."</BR>"; 
    $y = $x % (1 << 15); 
    echo $y." ".decbin($y)."</BR>"; 
?> 

uscita:

13622895711870  11010011110111000001011001111110 

-27010    11111111111111111001011001111110 

risolto

$y = bcmod($x,(1 << 15)); risolve il problema. Grazie per l'aiuto rapido! Era la mia prima domanda!

+1

ottengo risultati diversi (5758 per la seconda eco). Quale versione di PHP stai usando? –

+0

@ChrisHanson, suppongo che tu abbia il sistema 64but – RiaD

+0

Puoi leggere su [come PHP gestisce gli interi] (http://php.net/manual/en/language.types.integer.php). * "Se PHP incontra un numero oltre i limiti del tipo intero, verrà interpretato come un float.Inoltre, un'operazione che restituisce un numero oltre i limiti del tipo intero restituirà invece un valore float." * – Matt

risposta

8

problema è che non $xinteger ma float e fusa a negativo int quando si utilizza %

uso Prova BCMath invece per i grandi numeri