&&:从左往右出现错误则后面都不执行 也就是 第一个错则错
|| :没有判断到对的就一直执行直到有true 第一个对则对
首先要知道逻辑运算的是补码 ,而原反补的出现是为了减化运算
& 位与
与运算,两者都为真计算结果为真,反之为假: 都为1 则为1 ,有0则 0 (有一方不是1则为0)
| 位或
或运算,至少其一都为真计算结果为真,反之为假:有1就是1 都是0则为 0
^ 异或
异或运算,两者不同为真,反之为假:不一样就是1 ,一样为0 ( 有0有1为1 )
~位非 取反
包括运算符在内 0变1 1变0
运用1:a^a=0 异或自己 显然都是一样的 所以为0
a^0=a 异或0 不一样的是1 所以等于本身
运用2:看奇偶
a&1 0000 0001 与 都是1才是1 前面一定是0 那最后一位奇数1 &1 为1 最终得到 1 偶数 为0
// System.out.println(-2&4); //都是1则1
/*-2 1000 0010
* 1111 1101 -2的反码
* 1111 1110 -2的补码
* 4 0000 0100
* 0000 0100 补 是正数 补=原 ---------4
* */
// System.out.println(-2&-4);
/*
-2 1000 0010
1111 1101
1111 1110
-4 1000 0100
1111 1011
1111 1100
1111 1110
1111 1100
1111 1100 补
1111 1011
1000 0100 ----- -4
*/
// System.out.println(-2|-4); //有1就是1
/*1111 1110
*1111 1100
*1111 1110 补
*1111 1101
*1000 0010 --- -2
* */
// System.out.println(-2^-4); //不一样就是1
/*1111 1110
*1111 1100
*0000 0010 --- 2
* */
System.out.println(~-4);//包括符号位取反
/*1000 0100
*1111 1011
*1111 1100
*0000 0011 --- 3
*
* */