У меня есть эта функция на JavaScript
function b(e, t) {
return e << t | e >>> 32 - t
}
function c(e, t) {
var n, r, a, o, i;
return a = 2147483648 & e, o = 2147483648 & t, n = 1073741824 & e, r = 1073741824 & t, i = (1073741823 & e) + (1073741823 & t), n & r ? 2147483648 ^ i ^ a ^ o : n | r ? 1073741824 & i ? 3221225472 ^ i ^ a ^ o : 1073741824 ^ i ^ a ^ o : i ^ a ^ o
}
function d(e, t, n) {
return e & t | ~e & n
}
function e(e, t, n) {
return e & n | t & ~n
}
function f(e, t, n) {
return e ^ t ^ n
}
function g(e, t, n) {
return t ^ (e | ~n)
}
function h(e, t, n, r, a, o, i) {
return e = c(e, c(c(d(t, n, r), a), i)), c(b(e, o), t)
}
и я пытаюсь создать тот же метод на php
function h($e, $t, $n, $r, $a, $o, $i) {
$e = c($e, c(c(d($t, $n, $r), $a), $i));
return c(b($e, $o), $t);
}
function g($e, $t, $n) {
return $t ^ ($e | ~$n);
}
function f($e, $t, $n) {
return $e ^ $t ^ $n;
}
function e($e, $t, $n) {
return $e & $n | $t & ~$n;
}
function b($e, $t) {
return ll($e, $t) | rrr($e, 32 - $t);
}
function c($e, $t) {
$a = 2147483648 & $e;
$o = 2147483648 & $t;
$n = 1073741824 & $e;
$r = 1073741824 & $t;
$i = (1073741823 & $e) + (1073741823 & $t);
$m = $n & $r ? 2147483648 ^ $i ^ $a ^ $o : $n;
$n = $r ? 1073741824 & $i ? 3221225472 ^ $i ^ $a ^ $o : 1073741824 ^ $i ^ $a ^ $o : $i ^ $a ^ $o;
return $m | $n;
}
function d($e, $t, $n) {
return $e & $t | ~$e & $n;
}
Я пытаюсь вызвать функцию h () на обоих языках, используя эти параметры
h(271733878,1608091569,4023233417,2562383102,32869,12,3905402710)
В javascript эта функция возвращает -967207873 , но в PHP эта функция возвращает 3327756351 . Эта функция возвращает положительные числа, JS и PHP возвращают одно и то же целое число, но я не знаю, почему, когда результатом является отрицательное число на JS, эта функция на обоих языках не совпадает.
Есть какая-то ошибка, которую я делаю?