echo -1 >> 8; //returns -1
function gmp_shiftr($x,$n) { // shift right
return(gmp_div($x,gmp_pow(2,$n)));
}
echo gmp_strval(gmp_shiftr(-1, 8)); //returns 0
Я пытаюсь получить те же возвращаемые значения, которые в противном случае я бы получил от побитовых операторов на 64-битной машине с функциями GMP, но он не делает этого для отрицательных чисел.
Iзадал довольно идентичный вопрос некоторое время назад, но эта тема полностью умерла.Верхний ответ в основном предлагал мне отредактировать код C, лежащий в основе PHP, но, поскольку я на управляемом хостинге, я не могу связываться с исходным кодом (не говоря уже об отсутствии переносимости в таком решении).
Я использую функции GMP, потому что мне нужно иметь дело с большими числами, на которых 32-битные системы не дают правильных результатов.Я также пытался использовать математические функции BC, но они имеют ту же проблему с отрицательными # s.