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值,不需要进制之间的转换等操作。
三、总结
一个&是位运算,两个&&是逻辑运算;
一个要进制转换,两个不用太多操作;
一个要按位逻辑,两个直接前后逻辑。
可以这样记忆:位运算只有一个运算符,所以还有另一只手去做别的事,就需要进制转换再逻辑运算;逻辑运算两个运算符,左右手各拿一个,没有空余的手去做其他的事,就直接逻辑运算。
上一篇: Python学习笔记八(re模块)
下一篇: python学习笔记八(模块)