如何在不使用`%`模运算符的情况下检查一个数字是否是偶数?
我们可以对这个问题使用按位&
运算符,&
对其操作数进行运算,并将其视为二进制值,然后执行与运算。
function isEven(num) { if (num & 1) { return false } else { return true } }
0
二进制数是 000
1
二进制数是 001
2
二进制数是 010
3
二进制数是 011
4
二进制数是 100
5
二进制数是 101
6
二进制数是 110
7
二进制数是 111
以此类推…
与运算的规则如下:
a | b | a & b |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 1 | 1 |
因此,当我们执行console.log(5&1)
这个表达式时,结果为1
。首先,&
运算符将两个数字都转换为二进制,因此5
变为101
,1
变为001
。
然后,它使用按位怀运算符比较每个位(0
和1
)。101&001
,从表中可以看出,如果a & b
为1
,所以5&1
结果为1
。
101 & 001 |
---|
101 |
001 |
001 |
- 首先我们比较最左边的
1&0
,结果是0
。 - 然后我们比较中间的
0&0
,结果是0
。 - 然后我们比较最后
1&1
,结果是1
。 - 最后,得到一个二进制数
001
,对应的十进制数,即1
。由此我们也可以算出console.log(4 & 1)
结果为0
。知道4
的最后一位是0
,而0 & 1
将是0
。如果你很难理解这一点,我们可以使用递归函数来解决此问题。 -
function isEven(num) { if (num < 0 || num === 1) return false; if (num == 0) return true; return isEven(num - 2); }
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
码云笔记 » 如何在不使用`%`模运算符的情况下检查一个数字是否是偶数?
码云笔记 » 如何在不使用`%`模运算符的情况下检查一个数字是否是偶数?