Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 이진수의 인접한 비트를 교환하여 새로운 십진수 만들기

문제 설명

숫자를 하나 입력받는 JavaScript 함수를 작성해야 합니다.

이 함수는 입력받은 숫자의 이진수 표현을 탐색하면서 인접한 두 비트를 서로 교환하여 새로운 이진수를 만들어야 합니다. 그리고 마지막으로, 새롭게 만들어진 이진수에 해당하는 십진수 값을 반환하면 됩니다.

예를 들어, 숫자 13의 이진수 표현은 1101입니다. 인접한 비트를 두 개씩 짝지어 교환하면 1110이 되고, 이 값의 십진수 표현인 14가 최종 결과가 됩니다.

예제 코드

다음은 위 문제를 해결하는 코드입니다 −

const num = 13;
const swapBits = (num) => {
   // 숫자를 이진수 문자열로 변환한 뒤 배열로 분리
   let arr = num.toString(2).split('');
   // 비트 개수가 홀수라면 앞에 0을 추가하여 짝수로 맞춤
   if(arr.length % 2){
      arr.unshift(0);
   }
   // 두 칸씩 건너뛰며 인접한 비트를 서로 교환
   for(let i = 0; i < arr.length - 1; i = i + 2) {
      [arr[i], arr[i + 1]] = [arr[i + 1], arr[i]];
   }
   // 교환된 이진수를 다시 십진수로 변환하여 반환
   return +('0b' + arr.join(''));
}
console.log(swapBits(num));

코드 설명

이 코드의 동작 과정을 단계별로 살펴보면 다음과 같습니다.

1단계: toString(2) 메서드를 사용해 숫자를 이진수 문자열로 변환하고, split('')으로 각 비트를 배열 요소로 분리합니다.

2단계: 비트의 개수가 홀수라면 짝을 맞출 수 없으므로, unshift(0)를 통해 맨 앞에 0을 추가합니다. 이렇게 해도 십진수 값은 변하지 않습니다.

3단계: 반복문을 통해 인덱스를 2칸씩 증가시키면서 각 위치의 비트와 바로 다음 비트를 배열 구조 분해 할당으로 교환합니다.

4단계: 교환이 완료된 배열을 다시 문자열로 합친 후, '0b' 접두사를 붙여 십진수로 변환하여 반환합니다.

출력 결과

14