(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
*
*/