PHP побитовое и Javascript отрицательное число - PullRequest
0 голосов
/ 05 июля 2018

У меня есть эта функция на 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, эта функция на обоих языках не совпадает.

Есть какая-то ошибка, которую я делаю?

...