人往往在最好的时光错过了最重要的事情做了不重要的事。
转眼已经离开学校4个月了,离开了学校才发现自己丢了开发过程中最重要的东西——基础。
为了看hashMap的原理今天特意补了一下位运算
& 且当都为真时为真其余全为假
5&3 = 1;只有当双方都为真的时候才为1。
5的二进制为0101,3的二进制为0011
0000 0101
0000 0011
————
0000 0001 最后等于1;
| 或 一方为真或者双方同时为真时才为真
5|3 = 7 一方或者双方为1时值就为1
0000 0101
0000 0011
————
0000 0111 最后等于7
^异或 两个位相同为 0,相异为 1
5^3 = 6 两个位相同为 0,相异为 1)
0000 0101
0000 0011
————
0000 0110 最后等于6
----------------我是分界线--------------------------------
之前在面试的过程遇到一道面试题:
不能使用第三个数或加减乘除,交换两个数
a= a ^ b;
b = a ^ b; //b = b ^ a ^ b = a
a = b ^ a; //a = a ^ b ^ a = b
----------------我是分界线--------------------------------
~ 取反 0为1 1为0
~5 = -6 0000 0101 取反后结果为 1111 1010 = -6
>>右移
5>>2 ------> 0000 0101 变为 0000 0001 = 1
<< 左移
5<<2 ------->0000 0101 变为 0001 0100 = 20
>>> 无符号右移
5>>>2 --------->0000 0101 变为 0000 0001 = 1(正数无符号右移 直接在高位补0)
-5>>>2 --------->0000 0000 0000 0000 0000 0000 0000 0101,取反后加1为1111 1111 1111 1111 1111 1111 1111 1011 然后右移3位
0011 1111 1111 1111 1111 1111 1111 1110 = 1073741822(因为Java中的int有32位,负数先取反在加一在移位)