运算符&与&&,|与||的区别
&和 | 既是逻辑运算符也是位运算符,而&&和||只是逻辑运算符。
&&是逻辑与运算符,||是逻辑或运算符,都是逻辑运算符,两边只能是bool类型
&与| 既可以进行逻辑运算,又可以进行位运算,两边既可以是bool类型,又可以是数值类型
区别:
if (A && B) 如果 A 为 false ,整个表达式就为 false,不再计算 B 的值了。
if (A & B) 如果 A 为 false ,整个表达式就为 false,但还要计算 B 的值。
if (A && B++) 如果A 为 false,&&不会再计算后面的值
if (A & B++) 如果A 为 false,&则会计算后面的值
案例:
int i = 1;
if( i == 2 & i++ == 2 ){ } //i==2为false,但i++==2还会继续比较,所以i++被执行
System.out.println(i); //i 打印出来为2
int j = 1;
if( j == 2 && j++ == 2 ) { } // j == 2为false,但j++==2不会继续比较,所以j++不被执行
System.out.println(j);//j打印出来为1
逻辑运算符&与&&的区别是:
& 无论左边结果是什么,右边还是继续运算;
&&当左边为假,右边不再进行运算。就效率而言,这个更好
但是两者的结果是一样的。&&和||是比较高效那么一点点。
对于整型,& 和 | 计算操作数的按位“与”。例如: 5&3
&:将两个表达式的值按二进制位展开,对应的位按值进行“与”运算,结果保留在该位上。
运算规则:该位只要有一个值为0结果为0,否则结果为1。如果两数位数不同,则较短数高位补零,再运算。
0&0=0; 0&1=0; 1&0=0; 1&1=1;
0 1
2的0次方是1
3&5 即 0000 0011 & 0000 0101 = 0000 0001 ;因此,3&5的值得1。
0000 0011
& 0000 0101
0000 0001
170&204对应二进制就是10101010&11001100=10001000
170&204=136