Java 定义了几个按位运算符,可以将其应用于整数类型 long,int,short,char 和 byte。
按位运算符对位执行,并执行逐位运算。假设 a = 60 和 b = 13; 现在以二进制格式,他们将如下 -
a = 0011 1100
b = 0000 1101
-----------------
a&b = 0000 1100
a | b = 0011 1101
a ^ b = 0011 0001
a = 1100 0011
假设整数变量 A 保持 60,变量 B 保持 13,则 -
- public class Test { public static void main(String args[]) { 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 ); c = a | b;
- /* 61 = 0011 1101 */
- System.out.println("a | b = " + c ); c = a ^ b;
- /* 49 = 0011 0001 */
- System.out.println("a ^ b = " + c ); c = ~a;
- /*-61 = 1100 0011 */
- System.out.println("~a = " + c ); c = a << 2;
- /* 240 = 1111 0000 */
- System.out.println("a << 2 = " + c ); c = a >> 2;
- /* 15 = 1111 */
- System.out.println("a >> 2 = " + c ); c = a >>> 2;
- /* 15 = 0000 1111 */
- System.out.println("a >>> 2 = " + c );
- }
- }
- 输出结果
- a & b = 12
- a | b = 61
- a ^ b = 49
- ~a = -61
- a << 2 = 240
- a >> 15
- a >>> 15
总结:
&(按位和) | 如果二进制 AND 运算符存在于两个操作数中,则二进制 AND 运算符将对结果复制一位。 | (A 和 B)将给出 12 是 0000 1100 |
| (按位或) | 二进制 OR 运算符如果存在于任一操作数中,则复制一位。 | (A | B)将给出 61,其为 0011 1101 |
^(按位异或) | 二进制 XOR 操作符复制该位,如果它设置在一个操作数中,而不是两者。 | (A ^ B)将给出 49,其为 0011 0001 |
(按位称赞) | 二进制补码运算符是一元的,具有 "翻转" 位的作用。 | (A)将给出 - 61,由于有符号的二进制数,它是 2 0 的补码形式的 1100 0011。 |
<<(左移) | 二进制左移操作符。左操作数值左移由右操作数指定的位数。 | A << 2 将给出 240 是 1111 0000 |
>>(右移) | 二进制右移操作符。左操作数值被右操作数指定的位移动。 | A >> 2 将给出 15 是 1111 |
>>>(零填补右移) | 右移零填充操作符。左操作数值右移由右操作数指定的位数,移位值用零填充。 | A >>> 2 将给出 15 是 0000 1111 |
来源: http://www.bubuko.com/infodetail-2075387.html