Quindi, quando si utilizza il mio metodo per preformare un (>>>) spostamento di zero senza segno in PHP, il risultato non è corretto quando i numeri coinvolgono i negativi.PHP Unsigned Right Shift - Malfunctioning
Risultati di applicazioni PHP:
INPUT: 10 >>> 3
INPUT: -10 >>> 3
OUTPUT: 1
OUTPUT: 2684354558
Java Application RISULTATI:
INPUT: 10 >>> 3
INPUT: -10 >>> 3
OUTPUT: 1
OUTPUT: 536870910
(I primi risultati sono corretti e generato da Java e quindi i risultati inferiori sono errate e generato da PHP)
È solo quando il numero è negativo in PHP che non riesce.
I turni utilizzate in quelle applicazioni è:
Aiutateci se potete!
Metodo per spostare in PHP:
function urshift($x, $n){
$mask = 0x40000000;
if ($x < 0){
$x &= 0x7FFFFFFF;
$mask = $mask >> ($n-1);
$ret = ($x >> $n) | $mask;
$ret = str_pad(decbin($ret), 32, '0', STR_PAD_LEFT);
$ret[0] = '1';
$ret = bindec($ret);
} else {
$ret = (int)$x >> (int)$n;
}
return $ret;
Ok, non è chiaro in che modo i risultati corrispondono al codice. Potresti creare un [test-case minimale] (http://sscce.org) che dimostra chiaramente come vengono utilizzati gli input e gli output? –
L'ho risolto quindi è chiaro che cosa sono l'input e l'output. –