共计 1063 个字符,预计需要花费 3 分钟才能阅读完成。
与其余语言一样,JS 也有位运算符,这里介绍一下“&”,及其一个简略的利用:
“&”的运算办法:两个数值的个位别离相与,同时为 1 才得 1,只有一个为 0 就为 0。
如下表示意:
a | b | 后果 |
---|---|---|
1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
判断一个正整数是否为偶数
咱们就能够利用 & 的运算个性,来判断一个数是否为偶数。
咱们晓得,如果一个正整数是偶数,那么它的二级制示意的最低为肯定不能是 1,所以,能够与 1 进行 & 运算,如果为 0,则阐明最低为为 0,就是偶数。
var isEven = function(n) {return n > 0 && (n & 1) === 0;
};
判断一个数是否为 2 的幂
一个数 n 是 2 的幂,当且仅当 n 是正整数,并且 n 的二进制示意中仅蕴含 1 个 1。
与下面判断偶数的思路类似,咱们也能够用 & 运算来测试。
这里有个技巧是能够用 n & (n – 1) 来进行检测,一个数是否是 2 的幂,原理如下:
假如 nn 的二进制示意为 (a10…0)₂ ,其中 a 示意若干个高位,1 示意最低位的那个 1,0…0 示意前面的若干个 0,那么 n−1 的二进制示意为:(a01…1)₂
咱们将 (a10…0)₂ 与 (a01…1)₂ 进行按位与运算,高位 a 不变,在这之后的所有位都会变为 0,这样咱们就将最低位的那个 1 移除了。移除之后,如果不为 0,那么示意整个二级制数不止一个 1,所以就必定不是 2 的幂,反之,如果为 0,整个二级制数只有一个 1,则为 2 的幂。
因而,如果 n 是正整数并且 n & (n – 1) = 0,那么 n 就是 2 的幂。
故判断一个数是否为 2 的幂可用如下办法进行判断:
var isPowerOfTwo = function(n) {return n > 0 && (n & (n - 1)) === 0;
};
判断一个数是否为 4 的幂
依据数学知识咱们晓得如果一个数是 4 的幂,那么它必然是 2 的幂,而且在此基础上,它的二进制示意必然所有的 1 都在偶数位上。
咱们假如数字为应用 32 位二进制示意的正整数,即 n <= 2^31 – 1。
咱们能够构建一个整数 mask , 它的所有偶数二进制位都是 0,所有奇数二进制位都是 1。这样一来,咱们将 n 和 mask 进行按位与运算,如果后果为 0,阐明 n 二进制示意中的 1 呈现在偶数的地位,否则阐明其呈现在奇数的地位。
mask=(10101010101010101010101010101010)₂
或者用 16 进制示意,使其更好看:
mask=(AAAAAAAA)₁₆
那么在判断的时候就能够用以下判断是否为偶数:
var isPowerOfFour = function(n) {return n > 0 && (n & (n - 1)) === 0 && (n & 0xaaaaaaaa) === 0;
};