了解此示例中的按位运算
Understanding bitwise operation in this example
我正在研究 JavaScript 中的一些常见算法实现,并在寻找快速排序时发现了这个:
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;
}
我想知道按位运算背后的数学原理是什么,我对它们还是个新手。
按位运算就是将左右值之和除以2。
如果 left=2 and right=7 输出为 9/2 并截断为 4.
右移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
的整数。
我正在研究 JavaScript 中的一些常见算法实现,并在寻找快速排序时发现了这个: 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;
}
我想知道按位运算背后的数学原理是什么,我对它们还是个新手。
按位运算就是将左右值之和除以2。 如果 left=2 and right=7 输出为 9/2 并截断为 4.
右移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
的整数。