今日技术简报
layout: post title: “2019-02-24-今日技术简报” date: 2019-02-24 12:11:30 +0800
- ~ 表示按位取反
~200 = -201 ~-200 = 199
运算规则:如果位为0,结果是1,如果位为1,结果是0.
比如:~37
在Java中,所有数据的表示方法都是以补码的形式表示,8转为二进制是100101.
补码后为: 00000000 00000000 00000000 00100101
取反为: 11111111 11111111 11111111 11011010
因为高位是1,所以原码为负数,负数的补码是其绝对值的原码取反,末尾再加1。
因此,我们可将这个二进制数的补码进行还原: 首先,末尾减1得反码:11111111 11111111 11111111 11011001 其次,将各位取反得原码:
00000000 00000000 00000000 00100110,此时二进制转原码为38
所以~37 = -38.
- Java»与»>的区别
’»‘:带符号右移。正数右移高位补0,负数右移高位补1。比如:
4 » 1,结果是2;-4 » 1,结果是-2。-2 » 1,结果是-1。
’»>’:无符号右移。无论是正数还是负数,高位通通补0。
对于正数而言,»和»>没区别。
对于负数而言,-2 »> 1,结果是2147483647(Integer.MAX_VALUE),-1 »> 1,结果是2147483647(Integer.MAX_VALUE)。
以下代码可以判断两个数的符号是否相等
return ((a » 31) ^ (b » 31)) == 0;
- arraycopy(GrowingArrayUtils)
T[] newArray = (T[])((Object[])Array.newInstance(array.getClass().getComponentType(), growSize(currentSize)));
System.arraycopy(array, index, array, index + 1, currentSize - index);
将原数组的一部分拷贝到另外一个数组
public class java_test {
public static void main(String... args) {
int before[] = {0, 2, 3, 0};
int after[] = new int[4];
System.arraycopy(before, 0, after, 0, 0);
System.arraycopy(before, 1, after, 2, 2);
after[1] = 1;
for (int i = 0; i < after.length; i++) {
System.out.println("i:" + i + " after value:" + after[i]);
}
System.arraycopy(before, 1, before, 2, 2);
before[1] = 1;
for (int i = 0; i < before.length; i++) {
System.out.println("i:" + i + " before value:" + before[i]);
}
}
}
-
UnmodifiableList 只可以查看不可以更改的Array,常用来封装和重构
-
RecyclerView 的getChildCount方法被改写. ```java public int getChildCount() { return this.mRecyclerView.mLayout.getChildCount(); }
```