&&和&
&&和&:是双目运算符,写成(a&&b)或(a&b),且a、b结果一定是boolean类型(即true或false)。
- &&:短路与,如果a为false不执行b部分直接输出结果
- &:非短路与,a为false依然执行b部分
例如:
代码1:
public class Operate {
public static void main(String[] args) {
if((11%2==0)&&(11/0==0))
{
System.out.println("&&");
}
}
}
代码2:
public class Operate {
public static void main(String[] args) {
if((11%2==0)&(11/0==0))
{
System.out.println("&");
}
}
}`
上面两段代码中,代码1不会报错,代码2会报错。因为对于&&:(11%2==0)为false就不执行(11/0==0);对于&:(11%2==0)为false依然执行(11/0==0)的判断;但是除数为0是没有意义的,所以会报错。
按位与
是一个双目运算符,语法形式为a&b,将两个数转换为2进制数进行每一位的与运算。
例如:14&(-8)
步骤:
- 将两个数表示为二进制数(此时的二进制数是原码,因为人能直接看来的形式就是原码形式)因为这两个数默认是int类型,int类型是一个4字节的数,一个字节是8位,所以14的原码是:00000000 00000000 00000000 00000110,-8的原码是:10000000 00000000 00000000 00001000(原码第一位是符号位)
- 将两个数原码转换为反码,对于正数原码反码补码都一样,对于负数,反码是对原码出符号位外取反,所以-8反码:11111111 1111111111111111 11110111
- 将两个数转化为补码,对于负数就是反码+1,所以-8补码:11111111 11111111 11111111 11111000
- 对14和-8补码每一位进行与操作:
14: 00000000 00000000 00000000 00001110
-8: 11111111 11111111 11111111 11111000
代码:
public class Andand {
public static void main(String[] args) {
System.out.println(-8&14);
}
}
结果:8