public class Demo {
public static void main(String[] args) {
test1();
test2();
test3();
test4();
test5();
test6();
test7();
test8();
}
/**
* &(按位与),有0即为0
*
* &按位与的运算规则是将两边的数转换为二进制位,然后运算最终值,运算规则即(两个为真才为真)1&1=1 , 1&0=0 , 0&1=0 , 0&0=0
*
* 3的二进制位是0000 0011 , 5的二进制位是0000 0101 , 那么就是011 & 101,由按位与运算规则得知,001 & 101等于0000 0001,最终值为1
*
* 7的二进制位是0000 0111,那就是111 & 101等于101,也就是0000 0101,故值为5
*
*/
private static void test1(){
int i =3; //0000 0011
int h=5; //0000 0101 0000 0001
System.out.println("test1()---->& ---->" +(i & h));
}
/**
* &&(逻辑与)
*
* &&逻辑与也称为短路逻辑与,先运算&&左边的表达式,一旦为假,后续不管多少表达式,均不再计算,一个为真,再计算右边的表达式,两个为真才为真。
*
*/
private static void test2(){
int i =3;
int h=5;
System.out.println("test2()---->&& ---->" +(3/100==0 && true));
}
/**
* |(按位或)有1即为1
*
* |按位或和&按位与计算方式都是转换二进制再计算,不同的是运算规则(一个为真即为真)1|0 = 1 , 1|1 = 1 , 0|0 = 0 , 0|1 = 1
* 6的二进制位0000 0110 , 2的二进制位0000 0010 , 110|010为110,最终值0000 0110,故6|2等于6
*/
private static void test3(){
int i =3; // 000 011
int h=5; // 000 101 ----> 000111
System.out.println("test3()---->| ---->" +(3 | 5));
}
/**
* ||(逻辑或),有真即为真,
* 逻辑或||的运算规则是一个为真即为真,后续不再计算,一个为假再计算右边的表达式。
*/
private static void test4(){
System.out.println("test4()---->|| ---->" +(true || false));
}
/**
* ^异或
*
* ^异或运算符顾名思义,异就是不同,其运算规则为1^0 = 1 , 1^1 = 0 , 0^1 = 1 , 0^0 = 0
* 5的二进制位是0000 0101 , 9的二进制位是0000 0011,也就是0101 ^ 0011,结果为1100 , 00001100的十进制位是12
*
*/
private static void test5(){
int i =3; //0011
int h=5; //0101 0110
System.out.println("test5()---->^ ---->" +(i^h));
}
/**
* <<
* 5<<2的意思为5的二进制位往左挪两位,右边补0,5的二进制位是0000 0101 ,
* 就是把有效值101往左挪两位就是0001--> 0100 ,正数左边第一位补0,负数补1,等于乘于2的n次方,十进制位是20
*/
private static void test6(){
int h=5; //0101 0101
System.out.println("test6()---->^ ---->" +(5<<2));
}
/**
* >>
* 5>>2的意思为5的二进制位往右挪两位,左边补0,5的二进制位是0000 0101 ,
* 就是把有效值101往右挪两位就是0101 (0000 0001),正数左边第一位补0,负数补1,等于乘于2的n次方,十进制位是20
*/
private static void test7(){
int h=5; //0101 ---> 0000 0001
System.out.println("test7()---->^ ---->" +(5>>2));
}
/**
* >>> 无符号位右移
*/
private static void test8(){
//0000 1111 ----> 0011
System.out.println("test7()---->^ ---->" +(15>>>2));
}
}