public class BitOpt {
public static void main(String[] args) {
//int 类型变量共使用4个字节即32位二进制位存储
//其中最高位第32位为符号位,表示此整数是否有负号,0代表没有即正数1代表有负号即负数
int m = 61; //111101为其二进制表示形式
//正整数的存储形式:除第32位符号位为0外,其余31位是直接把此数的二进制表示形式通过补0补齐到31位得到的如下
// 0000000 00000000 00000000 00111101
//结合符号位0最终得到61在内存中的存储形式
//00000000 00000000 00000000 00111101
int n = -61;
//负整数的存储形式:除第32位符号位为1外,其余31位的处理稍复杂一些,如下
//1. 先得到此负数的绝对值61的二进制表示形式通过补0补齐到31位得到
// 0000000 00000000 00000000 00111101
//2. 在上面的基础上按位取反,即0变1,1变0,得到
// 1111111 11111111 11111111 11000010
//3. 在步骤2的基础上按二进制计算规则(逢二进一)加上1得到
// 1111111 11111111 11111111 11000011
//结合符号位1最终得到-61在内存中的存储形式
//11111111 11111111 11111111 11000011
}
}
public class BitOpt {
public static void main(String[] args) {
//位运算符共7个:& | ^ ~ << >> >>>
//计算规则,把二进制位1当作true,0当作false看待,按相应逻辑运算规则计算对应二进制位
//^ 按位异或规则为相同为0不同为1,即1-1和0-0得到0,1-0和0-1得到1
int r = 0;
int a = 61; //00000000 00000000 00000000 00111101
int b = -4; //11111111 11111111 11111111 11111100
r = a & b;
//00000000 00000000 00000000 00111101 : 61 a
//11111111 11111111 11111111 11111100 : -4 b
//--------------------------------------------- &
//00000000 00000000 00000000 00111100 : 60 r
r = a | b;
//00000000 00000000 00000000 00111101 : 61 a
//11111111 11111111 11111111 11111100 : -4 b
//--------------------------------------------- |
//11111111 11111111 11111111 11111101 : -3 r
r = a ^ b;
//00000000 00000000 00000000 00111101 : 61 a
//11111111 11111111 11111111 11111100 : -4 b
//--------------------------------------------- ^
//11111111 11111111 11111111 11000001 : -63 r
r = ~a;
//00000000 00000000 00000000 00111101 : 61 a
//--------------------------------------------- ~
//11111111 11111111 11111111 11000010 : -62 r
}
}