Please enable Javascript to view the contents

JavaScript巧用位操作符断奇偶

 ·  ☕ 2 分钟

前两天翻译了一篇文章,如何找到数组里面的唯一数字 – 码中人 ,发现按位运算可以做很多事,包括可以很便捷的判断数的奇偶。

  • 原文:https://www.geeksforgeeks.org/check-if-a-number-is-odd-or-even-using-bitwise-operators/
  • 翻译:码中人

给定一个数 N,使用位运算符检查该数是偶数还是奇数。如:

输入: N = 11 输出: Odd(奇数) 输入: N = 14 输出: Even (偶数)

方法1:按位异或

按位异或是指参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。即:0^0=0, 1^0=1, 0^1=1, 1^1=0

这个方法是用二进制数0001对数字的二进制最后一位进行处理。如果数字是偶数,数字异或之后操作会增加1,否则,数值会减少1。

所以代码如下:

看看结果 :

纳尼?怎么回事。

这里涉及运算符的优先级问题,因为相等运算符(==)的优先级比按位异或(^)要高。所以:

n ^ 1 == n + 1

相当于:

n^(1 == n+1)

即:

11为整数,为真。所以会出现11为偶数的错误。

应用分组修改优先级,正确应为:

运算符优先级 - JavaScript | MDN

方法2:按位与

按位与操作符用和号( &)表示,有两个操作数。本质上,按位与就是将两个数的每一个位对齐,然后基于真值表中的规则,对每一位执行相应的与操作。

规则为:1&1=1,1&0=0,0&1=0,0&0=0。

所以将数字与1相与,如果结果为1,即为奇数。如果为0,即为偶数。

方法3:按位或

按位或操作符用管道符( |)表示,规则为:1|1=1,1|0=1, 0|1=1 ,0|0=0。

同样将数值与1相或,得到的值如查比原来的数要大,即为偶数。数值不变即为奇数。

(完)

分享

码中人
作者
码中人
Web Developer