&(按位与)
&按位与的运算规则是将两边的数转为二进制数,然后运算的最终值,运算规则即(两个为真才为真)1&1=1、1&0=0、0&0=0、0&1=0。 3的二进制位为0000 0011,5的二进制位是0000 0101,011&101=0000 0001,最终值为1。 7的二进制位为0000 0111,111&101=0000 0001,最终值为5。
&&(逻辑与)
&&逻辑与也称为短路逻辑与,先运算&&左边的表达式,一旦为假,后续不管多少表达式,均不再计算,一个为真,再计算右边的表达式,两个为真才为真。
|(按位或)
|按位或和&按位与计算方式都是转换二进制再计算,不同的是运算规则(一个为真即为真)1|0 = 1 , 1|1 = 1 , 0|0 = 0 , 0|1 = 1
6的二进制位0000 0110 , 2的二进制位0000 0010 , 110|010为110,最终值0000 0110,故6|2等于6
||(逻辑或)
逻辑或||的运算规则是一个为真即为真,后续不再计算,一个为假再计算右边的表达式。
^(异或运算符)
^异或运算符顾名思义,两个值相异结果为真,其运算规则为1^0 = 1 , 1^1 = 0 , 0^1 = 1 , 0^0 = 0
5的二进制位是0000 0101 , 9的二进制位是0000 1001,也就是0101 ^ 1001,结果为1100 , 00001100的十进制位是12
<<(左移运算符)
5<<2的意思是5的二进制位往左移两位,即0000 0101左移为0001 0100成20(正数左边第一位补0,负数补1,等于乘于2的n次方)。
>>(右移运算符)
凡位运算符都是把值先转换成二进制,再进行后续的处理。5的二进制位是0000 0101,右移两位就是把101左移后为0000 0001,正数左边第一位补0,负数补1,等于除于2的n次方,结果为1。
~(取反运算符)
取反就是1变0,0变1。5的二进制位是0000 0101,取反就是1111 1010,即-6
>>>(无符号右移运算符)
正无符号数右移
无符号右移运算符和右移运算符的主要区别在于负数的计算,因为无符号右移是高位补0,移多少位补多少个0。 15的二进制位0000 1111,右移二位为0000 0011结果为3。
负无符号数右移
-6的二进制位是6的二进制位取反再加1,6的二进制也就是0000 0000 0000 0000 0000 0000 0000 0110,取反后加1就是1111 1111 1111 1111 1111 1111 1111 1010,右移三位0001 1111 1111 1111 1111 1111 1111 1111