欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java面试题之&与&&

程序员文章站 2022-03-05 13:09:18
...

Java中的&与&&代表的是完全不同的两个概念,一个是按位与运算,一个是逻辑运算。

一、&按位运算

先看按位运算定义:

程序中的所有数在计算机内存中都是以二进制的形式存储的,位运算就是直接对两个数的二进制表示形式进行比较运算;

说白了就是,把整数在内存中的二进制数据拿出来进行比较,比较的时候要上下对齐比较,得出的结果也是二进制数据,再转换成十进制数据显示,就是按位运算的最终结果。

举个例子:

6&11

  • 第一步:十进制6的二进制表现形式是110;
  • 第二步:十进制11的二进制表现形式是1011;
  • 第三步:6&11就可以写成:110 and 1011;

为了直白显示出两个数据的前后比较,可以这样写:

110

1011

但此时很明显的是,一个三位数据,一个是四位数据,位数不对应的,要按照自右向左的原则排序,不足的数位用0代替;那此时就应该写成:

0110

1011

按位与运算的运算规则是:1代表true,0代表false;

因为与运算的规则就是两个数据同时为真,结果才为真;

那么6&11的运算结果为

0010

  • 第四步:把0010 换算成十进制,就是最终结果2; 

二、&&逻辑运算符

逻辑运算符就是逻辑上的运算,即运算符左右两个数据必须是Boolean类型的;

&&也是与运算,同样遵守与运算的运算规则:两个数据同时为真,结果才为true;

举个例子:

boolean a = false;
Boolean b - true;

if(a&&b){
//输出  结果为真
}else{
//输出  结果为假
}

 那么此时程序就会走else不走if结构体,输出内容就是:结果为假;

因为逻辑运算符比较的就是左右两个数据的Boolean值,不需要进制之间的转换等操作。

三、总结

一个&是位运算,两个&&是逻辑运算;

一个要进制转换,两个不用太多操作;

一个要按位逻辑,两个直接前后逻辑。

可以这样记忆:位运算只有一个运算符,所以还有另一只手去做别的事,就需要进制转换再逻辑运算;逻辑运算两个运算符,左右手各拿一个,没有空余的手去做其他的事,就直接逻辑运算。