位运算符与逻辑运算符的区别
程序员文章站
2022-05-18 16:05:15
...
运算符的种类有很多,长相最相近的就要数位运算符和逻辑运算符了。
第一个区别就是运算顺序,位运算符的两端的表达式都要进行计算的,而逻辑运算符则不然,运算完第一个表达式之后如果已经判定整个表达式为真或假以后,便不再运算第二个表达式,这种现象又叫短路现象。以下程序演示了这一现象:
public class Calculate{
public static void main(String [] args){
double b=23.4;
int a=88;
if(a==88 || (b=90.0)==23.4);
System.out.println(b);
}
}
第二个区别就是运算对象的不同,众所周知,计算机只识别二进制补码,位运算符便是先将两端的值运算成二进制补码再进行下一步运算的。
在c语言中,规定0为假,非0即为真,但java中并不是,逻辑运算符两端只接受布尔型数据,即只对true和false进行运算。以下是逻辑运算符的错误示范:
public class Calculate{
public static void main(String [] args){
double b=23.4;
int a=88;
if(a==88 || b=90.0);
System.out.println(b);
}
}
这个程序在c语言中肯定是没有问题的,给b赋值90.0后表达式值便为90.0,非0即为真,但在java中逻辑运算符却不能对其运算,编译结果如下:
而按位运算符可以对布尔型运算也可以对数值型进行运算,例如以下代码
public class Firday {
public static void main(String[] args) {
System.out.println(true & false);
System.out.println(2 & 1);
}
}
在二进制逻辑中true为1,false为0,所以true & false为0001 & 0000=0,所以结果为false
public class Firday {
public static void main(String[] args) {
System.out.println(true & false);
System.out.println(2 & 1);
}
}