位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。
移位运算符包括,“左移运算符”,“有符号右移运算符”、“无符号右移运算符”。
位运算
-
异或 ^
异或运算符是用符号“^”表示的,其运算规律是:
两个操作数的位中,相同则结 果为0,不同则结果为1
简单实例/** * @function: 异或位运算 */ @Test public void test(){ int a=33; int b=32; System.out.println(a^b); }
输出结果:1
因为33转换成二进制是100001,32转换成二进制是100000,异或结果是000001拓展:异或的应用
第一:简单的加密解密
因为a ^ b ^ b = a
第二:高效率交换两个整数/** * @function: 使用异或,高效率交换两个整数 */ @Test public void test2(){ int a=100; int b=88; //使用异或交换 a=a^b; b=a^b; a=b^a; System.out.println(a); System.out.println(b); }
运行结果:
其实两个应用道理是相同的,一个数异或另一个数两次得到的还是他本身
-
与 &
与运算符用符号“&”表示,其使用规律如下:
两个操作数中位都为1,结果才为1,否则结果为0
简单实例/** * @function: 与位运算 */ @Test public void test3(){ int a=33; int b=32; System.out.println(a&b); }
运行结果:32
因为因为33转换成二进制是100001,32转换成二进制是100000,与结果是100000 -
或 |
或运算符用符号“|”表示,其运算规律如下:
两个位只要有一个为1,那么结果就是1,否则就为0
简单实例/** * @function: 或位运算 */ @Test public void test4(){ int a=33; int b=32; System.out.println(a|b); }
运行结果:33
因为因为33转换成二进制是100001,32转换成二进制是100000,或结果是100001 -
非 ~
非运算符用符号“~”表示,其运算规律如下:
如果位为0,结果是1,如果位为1,结果是0
简单实例/** * @function: 非位运算 */ @Test public void test5(){ int a=33; int b=~a; System.out.println(b); System.out.println(Integer.toBinaryString(b)); }
运行结果:
移位运算
移位运算操作的就是二进制的位
简单的,<<n 左移相当于乘2的n次方,>>n(>>>n) 右移相当于除2的n次方,然后这个>>>与>>的区别是对负数的处理上
简单示例
/**
* @function: 移位运算
*/
@Test
public void test6() {
int a = 32;
int b = -32;
System.out.println(Integer.toBinaryString(a));
System.out.println(Integer.toBinaryString(b));
System.out.println(Integer.toBinaryString(a >> 2));
System.out.println(Integer.toBinaryString(b >> 2));
System.out.println(Integer.toBinaryString(a >>> 2));
System.out.println(Integer.toBinaryString(b >>> 2));
System.out.println(Integer.toBinaryString(a << 2));
System.out.println(Integer.toBinaryString(b << 2));
}
运行结果