Tak więc, używając mojej metody do wprowadzenia (niepoprawnie przesuniętej prawej strony w PHP), wynik jest niepoprawny, gdy liczby zawierają negatywy.Niepodpisane prawe przesunięcie PHP - Nieprawidłowe działanie
Wyniki PHP Zastosowanie:
INPUT: 10 >>> 3
INPUT: -10 >>> 3
OUTPUT: 1
OUTPUT: 2684354558
WYNIKI JAVA APLIKACJI:
INPUT: 10 >>> 3
INPUT: -10 >>> 3
OUTPUT: 1
OUTPUT: 536870910
(najlepsze wyniki są prawidłowe, i generowane przez Java i dolne Wyniki są błędne i generowanych przez PHP)
To tylko wtedy, gdy liczba jest ujemna w PHP, która się nie powiedzie.
Przesunięcia wykorzystywane w tych zastosowaniach jest:
Proszę o pomoc, jeśli jest to możliwe!
Metoda dla przesunięcia w 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, nie jest jasne, w jaki sposób wyniki odpowiadają kodowi. Czy mógłbyś stworzyć [minimalny przypadek testowy] (http://sscce.org), który jasno pokazuje, w jaki sposób wykorzystywane są dane wejściowe i wyjściowe? –
Naprawiłem to, aby było jasne, jakie są wejścia i wyjścia. –