Summary of Operators
移位运算符
<< :按位左移运算符。左操作数按位左移右操作数指定的位数。 num << 1,结果相当于num乘以2
>> :按位右移运算符。左操作数按位右移右操作数指定的位数。num >> 1,结果相当于num除以2
java.util.ArrayList.grow(int)方法中
int newCapacity = oldCapacity + (oldCapacity >> 1);
ArrayList扩容为原来的1.5倍
>>> : 无符号右移,忽略符号位,空位都以0补齐
具体应用:JDK的二分法检索代码实现中
java.util.Arrays.binarySearch(long[], long)
public static int binarySearch(long[] a, long key) {
return binarySearch0(a, 0, a.length, key);
}
// Like public version, but without range checks.
private static int binarySearch0(long[] a, int fromIndex, int toIndex,
long key) {
int low = fromIndex;
int high = toIndex - 1;
while (low <= high) {
//无符号右移
int mid = (low + high) >>> 1;//equal mid=low +(high-low)/2;
long midVal = a[mid];
if (midVal < key)
low = mid + 1;
else if (midVal > key)
high = mid - 1;
else
return mid; // key found
}
return -(low + 1); // key not found.
}
异或^运算符
异或运算规则是:两个操作数的二进制位中,相同则结果为0,不同则结果为1。
如果a、b两个值相同,异或结果为0。如果a、b两个值不相同,则异或结果为1。
一个排序数组中所有数字出现2次,其中一个数字只出现1次,找出这个数字?
public static int getonenum(int a[], int size) {
int result = 0;
for (int i = 0; i < size; i++) {
result ^= a[i];
}
return result;
}
交换两个数的值
ch[i] ^= ch[len - 1 - i];
ch[len - 1 - i] ^= ch[i];
ch[i] ^= ch[len - 1 - i];
本文介绍了计算机科学中的位运算符,包括按位左移、按位右移、无符号右移以及异或运算符,并详细解释了这些运算符的工作原理和实际应用场景。例如,在Java的ArrayList类中使用按位右移进行容量的动态调整,以及利用异或运算符解决特定的数据处理问题。
199

被折叠的 条评论
为什么被折叠?



