Java 位运算

执行结果截图:

 

 代码:

public class BitwiseAndShiftOperators {
public static void main(String[] args) {
// 位运算,不要轻易使用位运算,很容易出错

// 十进制的60用二进制表示为0011 1100, 即32+16+8+4=60
int A = 60;

// 十进制的12用二进制表示为0000 1101,即 8+4+com.cnblogs.www.1=13
int B = 13;

// A&B会将两者的二进制按位进行与比较,与的结果是二进制的 0000 1100, 即十进制的12
System.out.println(A & B);

// A|B会将两者的二进制按位进行或比较,或的结果是二进制的 0011 1101,即十进制的61
System.out.println(A | B);

// A^B(异或)会将两者的二进制按位进行异或比较,异或的结果是二进制的 0011 0001,即十进制的49
System.out.println(A ^ B);

/* ~B(取反)会将B的二进制按位进行取反。13的补码是01101,
内存中的存储形式为0***1101(*表示无效位,其数量取决于分配的内存空间),
’~‘运算符对其按位取反(包括符号位也要取反)的结果是另一个补码1*** 0010
接下来需要原码显示,由于此补码最高位(符号位)是1,表示这是个负数,
因此需将补码先减1,获得反码为1*** 0001(最高位是符号位,***是无效位),
再将反码的非符号位取反,获得的原码为1*** 1110,其中有效位是1110,
即十进制的14。最终显示结果就是-14
*/
System.out.println(~B);

// 十进制的2的二进制是0010,左移3位是01 0000,换算为十进制是16
System.out.println(2 << 3);

// 十进制的32的二进制是0010 0000,右移5位是0000 0001,换算为十进制是1
System.out.println(32 >> 5);
}
}
posted @ 2021-12-11 17:36  JohnnyH  阅读(111)  评论(0)    收藏  举报