javascript algorithms / algorithms / bitLength

YOUNGJOO-YOON·2021년 12월 20일
0

알고리즘

목록 보기
7/12

(2).toString(2) // 0010

import decToBin from './decToBin';
/**
 * Return the number of bits used in the binary representation of the number.
 *
 * @param {number} number
 * @return {number}
 *
 */

export default function bitLength(number: number):number {
  let bitsCounter = 0;
  while (1 << bitsCounter <= number) {
    bitsCounter += 1;
  }
  return bitsCounter;
}

console.log(bitLength(1));
console.log(bitLength(2));
console.log(bitLength(3));
console.log(bitLength(4));

/**
 * bitLength(2)인 경우
 * # 1
 * (1<<0 <= 2) : 좌변 = 0001 (dec: 1) <= 2
 * bitLength = 1
 *
 * # 2
 * (1<<1 <= 2) : 좌변 = 0010 (dec: 2) <= 2
 * bitLength = 2
 * return bitLength;
 *  return 2 = (0010) bitLength = 2
 * ---
 * idea: 0001의 비트 이동을 number 번 반복하여, 입력받은 수의 비트 길이를 카운트한다.
 3 = (0011)이다, 비트의 길이는 2이다.
 
 1 = (0001)이다,
 try 1 number = 3 (0011)
 0001 << 0 cnt + 1 cnt = 1 , if (0001 <= 0011) : true
 0001 << 1 cnt + 1 cnt = 2 , if (0010 <= 0011) : true
 0001 << 2 cnt + 1 cnt = 3 , if (0100 <= 0011) : false
 return cnt = 2 
 0011의 길이는 2
 *
 * bitLength(3)인 경우
 * # 1
 * (1<<0 <= 3) : 좌변 = 0001 (dec: 1) <=  우변 = 3
 * bitLength = 1
 *
 * # 2
 * (1<<1 <= 3) : 좌변 = 0010 (dec: 2) <= 우변 = 3
 * bitLength = 2
 *
 * # 3
 * (1<<2 <= 3) : 좌변 = 0100 (dec: 4) <= 우변 = 3
 * 
 * return bitLength = 2
 * 
 */
profile
이 블로그의 글은 제 생각을 정리한 글과 인터넷 어딘가에서 배운 것을 정리한 글입니다. 출처는 되도록 남기도록 하겠습니다. 수정 및 건의 오류 등이 있으면 언제든지 댓글 부탁드립니다.

0개의 댓글