位运算符
&:按位与 \ 如果相对应位都是1,则=为1,否则为0 \ (A&B),得到12,即0000 1100\
|:按位或 \ 如果相对应位都是0,则=为0,否则为1 \ (A | B)得到61,即 0011 1101 \
~:按位非 \ 按位取反运算符翻转操作数的每一位,即01互换\ (〜A)得到-61,即1100 0011 \
^:按位异或 \ 如果相对应位值相同,则=为0,否则为1 \ (A ^ B)得到49,即 0011 0001 \
<<左位移运算符 \ 左操作数按位左移右操作数指定的位数。 \ A << 2得到240,即 1111 0000 \
>>右位移运算符 \ 左操作数按位右移右操作数指定的位数 \ A >> 2得到15即 1111 \
>>> 无符号右移 \ 移动得到的空位以零填充 \ A>>>2得到15即0000 1111 \
优先级S:~ 波浪
优先级A:<<、>>和>>>
优先级B:&
优先级C:^ shift+6
优先级D:/
JAVA示例
public static void main(String[] args) {
/* 60 = 0011 1100 */
/* 13 = 0000 1101 */
int A = 60;
int B = 13;
System.out.println( "A&B=" + (A&B) ); //0000 1100 12
System.out.println( "A|B=" + (A|B) ); //0011 1101 61
System.out.println( "~A=" + (~A) ); //1100 0011 -61
System.out.println( "A^B=" + (A^B) ); //0011 0001 49
System.out.println( "A<<2=" + (A<<2) ); //1111 0000 240
System.out.println( "A>>2=" + (A>>2) ); //1111 15
System.out.println( "A>>>2=" + (A>>>2) );//0000 1111 15
}
知识拓展
怎么用二进制表示负数?可通过以下几步:
1.取反码,即将对应的位取反
2.在反码基础上+1
3.补码 (根据需要表示的位数将位数补满)
如现有十进制数3414,通过上述操作可用二进制表示-3414
-原码:1101 0101 0110
-反码:0010 1010 1001
-反码+1:0010 1010 1010
-补码:1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 0010 1010 1010
64位操作系统默认补码总位数为64位,所以-3414用二进制表示如下:
1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 0010 1010 1010