java里的 ^
在这里写学习笔记还是很好的
在Objects.hashCode(key) ^ Objects.hashCode(value);遇到了 ^
那么 ^ 是什么呢?
按位异或运算符(^)是一个二元运算符,要化为二进制进行计算,在运算的两个元中,两个相同位相同,则结果为0,否则为1
如:
a =14
b = 8
a^b=?
a(2进制)=1110,b(2)=1000,a ^ b = 1110 ^ 1000=0110=6
也就是0 ^ 0=0, 1 ^ 0=1 ,0 ^ 1=0,1 ^ 1=0运算
与之相同的二元运算符
运算名 | 表达方式 |
---|---|
按位与 | a&b |
按位或 | a | b |
按位异或 | a^b |
按位取反 | ~a |
左移 | a<<b |
带符号右移 | a>>b |
按位与&
1&1=1
1&0=0
0&1=0
0&0=0
按位或 |
1|1=1
1|0=1
0|1=1
0|0=0
按位取反~
按位取反,因为整数在计算机里储存的是二进制,对有符号的整数里,二进制的最高位表示符号1为负数,0为正数
对二进制取反,0-》1,1-》0
然后计算出取反后二进制数的十进制
但由于计算机里储存负数是补码的形式,在获得原码的时候会加1,就导致了~5=-6
左移<<
左移运算符是一个计算机用语。用来将一个数的各二进制位全部左移若干位,移动的位数由右操作数指定,右操作数必须是非负值,其右边空出的位用0填补,高位左移溢出则舍弃该高位。
14(2)=00001110,则14<<2=00111000=56
带符号右移>>
带符号右移>>,与左移相类似,只不过是带着符号位向右移动,这也就不难解释,为什么没有带符号左移动了