const num = 4294967293;
num.toString(2) // '11111111111111111111111111111101'
num.toString(8) // '37777777775'
num.toString(16) // 'fffffffd'
const str2 = '11111111111111111111111111111101';
const str8 = '37777777775';
let str16 = 'fffffffd'
parseInt(str2, 2) // 4294967293
parseInt(str8, 8) // 4294967293
parseInt(str16, 16) // 4294967293
비트 연산자 | 기능 |
---|---|
x & y | x와 y 비트를 AND 연산한다. |
x | y | x와 y 비트를 OR 연산한다. |
x ^ y | x와 y 비트를 XOR 연산한다. |
~x | NOT 연산, x의 모든 비트를 반전시킨다. |
x << y | x의 비트를 y만큼 왼쪽으로 이동 |
x >> y | x의 비트를 y만큼 오른쪽으로 이동 |
반복문이나 재귀를 사용하지 않고 n이 2의 거듭제곱인지 확인하는 문제이다.
Input: n = 16
Output: true
Explanation: 2^4 = 16
Input: n = 3
Output: false
만약 거듭제곱이라면 그 수의 2진수는 예를 들면, '10', '100', '1000'과 같은 형식으로 변환된다.
2^1 = 2 = 10
2^2 = 4 = 100
2^3 = 8 = 1000
2^4 = 16 = 10000
만약 n
이 2의 거듭제곱이라면 n-1
은 n
의 반전된 비트를 갖게 된다.
⇒ n이 4일 때, '100' 이라면, n - 1 = 3 = '011'
비트 연산자로 n
과 n-1
를 비교하여 0과 같다면 n
은 거듭제곱이다.
/**
* @param {number} n
* @return {boolean}
*/
var isPowerOfTwo = function(n) {
if (n <= 0) return false
return (n & n-1) === 0
};