了解此示例中的按位运算

时间:2017-03-23 10:50:50

标签: javascript quicksort bitwise-operators

我正在研究JavaScript中的一些常见算法实现,并在寻找quicksort时找到了这个: https://rawgit.com/escherba/algorithms-in-javascript/master/src/quickmiddle-sort.js

它还实现了一个数组分区函数:

function partition(array, left, right) {
        var pivot = array[(left + right) >>> 1];
        while (left <= right) {
            while (array[left] < pivot) { left++; }
            while (array[right] > pivot) { right--; }
            if (left <= right) {
                var temp = array[left];
                array[left++] = array[right];
                array[right--] = temp;
            }
        }
        return left;
}

我想知道按位操作背后的数学是什么,我是他们的新手。

3 个答案:

答案 0 :(得分:2)

右移1就像除以2你可以自己测试一下。右边的二进制数字,右移并检查结果

答案 1 :(得分:2)

假设您正在询问此部分

(left + right) >>> 1

增加了两个操作数和一个zero-fill shift right >>> operator一位。

例如,您的值为9,并向右移动一位。

      9 (base 10): 00000000000000000000000000001001 (base 2)
                   --------------------------------
9 >>> 1 (base 10): 00000000000000000000000000000100 (base 2) = 4 (base 10)

结果是整数4

答案 2 :(得分:1)

按位运算只不过是将左右值之和除以2。 如果left = 2且right = 7,则输出为9/2并截断为4。