由于在平时写代码时,不经常使用位操作符,然而,在看jdk的源码中,经常会遇到位操作符。为了避免每次都要去网上或者书上查一下位操作符的用法,特此,写了这篇文章,用以备忘。
现在,言归正传。
按位与操作符(&)
如果两个输入位为1,则结果位也是1,否则,结果位为0。
int x = 12;
int y = 13;
int z1 = x&y;
System.out.println(Integer.toBinaryString(x));
System.out.println(Integer.toBinaryString(y));
System.out.println(Integer.toBinaryString(z1));
输出结果为:
1100
1101
1100
按位或操作符(|)
如果两个输入位为0,则结果位为0,否则,结果位为1。
int x = 12;
int y = 13;
int z2 = x|y;
System.out.println(Integer.toBinaryString(x));
System.out.println(Integer.toBinaryString(y));
System.out.println(Integer.toBinaryString(z2));
输出结果为:
1100
1101
1101
按位异或操作符(^)
如果两个输入位为1,那么结果位为0;如果两个输入位为0,那么结果位为0,否则,结果位为1。
int x = 12;
int y = 13;
int z3 = x^y;
System.out.println(Integer.toBinaryString(x));
System.out.println(Integer.toBinaryString(y));
System.out.println(Integer.toBinaryString(z3));
输出结果为:
1100
1101
1
按位非操作符(~)
按位取反。
int x = 12;
int y = 13;
int z4 = ~x;
System.out.println(Integer.toBinaryString(x));
System.out.println(Integer.toBinaryString(z4));
输出结果为:
1100
11111111111111111111111111110011
移位操作符
移位操作符只可用来处理整数类型。
左移(<<)
按照操作符右侧指定的位数向左移动,在低位补0。
int x = 12;
int y = 13;
int z5 = x<<2;
System.out.println(Integer.toBinaryString(x));
System.out.println(Integer.toBinaryString(z5));
输出结果为:
1100
110000
有符号数右移(>>)
有符号数右移位操作符使用“符号扩展”:若符号为正,则在高位插入0;若符号为负,则在高位插入1。
int x = 12;
int y = -13;
int z6 = x>>2;
int z7 = y>>2;
System.out.println("x = "+Integer.toBinaryString(x));
System.out.println("x>>2 = "+Integer.toBinaryString(z6));
System.out.println("y = "+Integer.toBinaryString(y));
System.out.println("y>>2 = "+Integer.toBinaryString(z7));
输出结果为:
x = 1100
x>>2 = 11
y = 11111111111111111111111111110011
y>>2 = 11111111111111111111111111111100
无符号右移(>>>)
无符号右移位操作符使用“0扩展”:无论正负,都在高位插入0。
int x = 12;
int y = -13;
int z8 = x>>>2;
int z9 = y>>>2;
System.out.println("x = "+Integer.toBinaryString(x));
System.out.println("x>>>2 = "+Integer.toBinaryString(z8));
System.out.println("y = "+Integer.toBinaryString(y));
System.out.println("y>>>2 = "+Integer.toBinaryString(z9));
输出结果为:
x = 1100
x>>>2 = 11
y = 11111111111111111111111111110011
y>>>2 = 111111111111111111111111111100