39. 运算符&与&&,|与||的区别、进制转换
● 运算符&与&&,|与||的区别
&和 | 既是逻辑运算符也是位运算符,而&&和||只是逻辑运算符。
&&是逻辑与运算符,||是逻辑或运算符,都是逻辑运算符,两边只能是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