介绍
按位操作符用来操作整数基本数据类型中的单个“比特”(bit),即二进制位。按位操作符
会对两个参数中对应的位执行布尔代数运算,并最终生成一个结果。
按位操作符来源于C语言面向底层的操作,在这种操作中经常需要直接操纵硬件,设置硬件
寄存器内的二进制位。Java的设计初衷是嵌入电视机机顶盒内,所以这‘种面向底层的操作仍被
保留了下来。但是,人们可能不会过多地用到位操作符。
&操作符
如果两个输入位都是1,则按位“与”操作符(&)生成一个输出位1,否则生成一个输出 位0。
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a & b; /* 12 = 0000 1100 */
System.out.println("a & b = " + c );
|操作符
如果两个输入位里只要有一个是1,则按位“或”操作符(|)生成一个输出位1,只有在两
个输入位都是0的情况下,它才会生成一个输出位0。
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a | b; /* 61 = 0011 1101 */
System.out.println("a | b = " + c );
^操作符
如果相对应位值相同,则结果为0,否则为1
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a ^ b; /* 49 = 0011 0001 */
System.out.println("a ^ b = " + c );
~操作符
按位“非”(〜),也称为取反操作符,它属于一元操作符,只对一个操作数进行操作(其他按位操作符是二元操作符)。按位“非”生成与输入 位相反的值——若输入0,则输出1,若输入1,则输出0。
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = ~a; /*-61 = 1100 0011 */
System.out.println("~a = " + c );
&= 按位与赋值运算符
//C&= 2等价于C = C&2
int a = 10;
int b = 20;
int c = 0;
c &= a ;
System.out.println("c &= a = " + c );
// output c &= a= 0
^ = 按位异或赋值操作符
int a = 10;
int b = 20;
int c = 0;
c ^= a ;
System.out.println("c ^= a = " + c );
// output c ^= a= 10
| = 按位或赋值操作符
int a = 10;
int b = 20;
int c = 0;
c |= a ;
System.out.println("c |= a = " + c );
// output c |= a= 10
boolean flag = true;
flag &= true;
System.out.println("true\t&=\ttrue\t结果:\t" + flag);
flag = true;
flag &= false;
System.out.println("true\t&=\tfalse\t结果:\t" + flag);
flag = false;
flag &= true;
System.out.println("false\t&=\ttrue\t结果:\t" + flag);
flag = false;
flag &= false;
System.out.println("false\t&=\tfalse\t结果:\t" + flag+"\n");
//------------------------------------------------------------------------------
flag = true;
flag |= true;
System.out.println("true\t|=\ttrue\t结果:\t" + flag);
flag = true;
flag |= false;
System.out.println("true\t|=\tfalse\t结果:\t" + flag);
flag = false;
flag |= true;
System.out.println("false\t|=\ttrue\t结果:\t" + flag);
flag = false;
flag |= false;
System.out.println("false\t|=\tfalse\t结果:\t" + flag+"\n");
//------------------------------------------------------------------------------
flag = true;
flag ^= true;
System.out.println("true\t^=\ttrue\t结果:\t" + flag);
flag = true;
flag ^= false;
System.out.println("true\t^=\tfalse\t结果:\t" + flag);
flag = false;
flag ^= true;
System.out.println("false\t^=\ttrue\t结果:\t" + flag);
flag = false;
flag ^= false;
System.out.println("false\t^=\tfalse\t结果:\t" + flag);
结果: