& 运算符和 && 的用法和区别
&
运算符一般是用来参与逻辑运算,运算结果一般为0和1两种,如果作为判断条件会分别转换为false
和true
& 运算符
比如,在浏览器控制台输入:
false & true //0
true & false //0
true & true //1
false & false //0
看的出来只要两个条件有一个为false
,输出结果就是0,只有当两个条件都为true
了,结果才是1
&& 运算符
控制台输入:
false && true //false
true && false //false
true && true //true
false && false //false
&&
输出结果,不再是0和1,而是true
和false
,同样可以用来作为判断条件,但是区别在于,&&
优化了运算速度,只要前面一个条件为false
了,就不再管后面的条件,直接输出false
数字&数字
如果是布尔类型的值进行&
运算,输出的是0和1,&&
运算输出的是true
和false
,
知道这个在平时开发中,差不多就够了.
但是,重点就是这个但是,但是面试官就喜欢考一些你平时不用的东西,下面来看看
3 & 7 //3
16 & 30 //16
7 & 34 //2
4 & 8 //0
18 & 24 // 16
这个输出结果,是不是突如其来,一脸懵逼,无中生友,暗度陈仓,凭空想象,凭空捏造
提示下,计算机底层都是二进制,现在自己脑袋里给他转成二进制看看有什么规律(为了看着方便,我在前面补上0,补成相同位数)
011 & 111 // 11
10000 & 11110 //10000
000111 & 100010 //10
0100 & 1000 // 0
10010 & 11000 // 10000
是不是感觉看出来了那么一点东西
当数字&数字
的时候,他是把两个数字都转为二进制再逐位进行比较,同时为1的时候,该位则保留为1,否则该位保留为0,最后输出结果
这个了解这个也不完全花里胡哨,至少以后再判断一个数是奇数还是偶数时,不用num%2
了,可以用num&1
这样不仅运算效率会增加,还能提升下逼格(主要是为了提升逼格)
数字&&数字
现在我们再来看看数字&&数字
又会发生些什么
3 && 7 // 7
7 && 3 // 3
16 && 30 // 30
30 && 16 // 16
7 && 34 // 34
34 && 7 // 7
...
0 && 18 // 0
18 && 0 // 0
这个输出结果就不难看出规律了,数字&&数字
当两个数字都不为0的时候,输出后面的数字,当其中一个数字为0的时候,输出0
至于原理,自己领悟...
个人博客: tiger9527.work