javascript 2진수 ↔ 1진수 변환, 비트 연산자로 2의 거듭제곱 수인지 확인하기

김민아·2023년 1월 5일
0

진수 변환

10진수 → n진수

Number.toString(n)

const num = 4294967293;

num.toString(2) // '11111111111111111111111111111101'
num.toString(8) // '37777777775'
num.toString(16) // 'fffffffd'

'n'진수 → 10진수

parseInt('n', n)

const str2 = '11111111111111111111111111111101';
const str8 = '37777777775';
let str16 = 'fffffffd'

parseInt(str2, 2) // 4294967293
parseInt(str8, 8) // 4294967293
parseInt(str16, 16) // 4294967293

비트 연산자 &,|,^,~,<<,>>

비트 연산자기능
x & yx와 y 비트를 AND 연산한다.
x | yx와 y 비트를 OR 연산한다.
x ^ yx와 y 비트를 XOR 연산한다.
~xNOT 연산, x의 모든 비트를 반전시킨다.
x << yx의 비트를 y만큼 왼쪽으로 이동
x >> yx의 비트를 y만큼 오른쪽으로 이동

231. Power of Two

231. Power of Two

반복문이나 재귀를 사용하지 않고 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-1n의 반전된 비트를 갖게 된다.
n이 4일 때, '100' 이라면, n - 1 = 3 = '011'

비트 연산자로 nn-1를 비교하여 0과 같다면 n은 거듭제곱이다.

/**
 * @param {number} n
 * @return {boolean}
 */
var isPowerOfTwo = function(n) {
  if (n <= 0) return false
  return (n & n-1) === 0
};

0개의 댓글