PHP按位和Javascript负数

时间:2018-07-05 12:32:23

标签: javascript php bitwise-operators bit-shift

我在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上的结果为负数时,两种语言的函数都不匹配。

我有什么错误吗?

0 个答案:

没有答案