AND연산자
const a = 5;
const b = 3;
const c = a & b;
console.log(c);
오른쪽 시프트(>>)
const a = 10;
const b = a >> 2;
console.log(b);
AND와 오른쪽 시프트 결합
const a = 10;
const b = 3;
const c = (a & b) >> 1;
console.log(c);
숫자n을 길이가 N인 이진수로 변환하는 함수
function toBinary(n, N) {
const rst = [];
while (n) {
rst.unshift(n & 1);
n >>= 1;
}
while (rst. length < N) {
rst.unshift(0);
}
return rst. join('');
}
첫 while문 설명
1. 빈 배열 rst 초기화
2. n이 true인 동안 while 루프를 실행합니다.
3. 첫 번째 반복에서 n & 1은 이진수 1인 (1001 & 0001) = 0001로 평가됩니다. 그리고 unshift()
4. n >>= 1이 실행되어 n의 비트를 오른쪽으로 한 칸 이동하여 n=1001 >> 1 = 0100이 됩니다. 이는 n을 2로 나누는 것과 같습니다. (2**1 = 2)
5. n=4로 루프는 계속됩니다. 두 번째 반복에서 (0100 & 0001) = 0000, 이는 이진수 0입니다. 그리고 unshift()
6. n >>= 1이 실행되어 n=0100 >> 1 = 0010이 됩니다.
7. 루프는 n=2로 계속됩니다. 세 번째 반복에서는 이진수 0인 (0010 & 0001) = 0000입니다. 그리고 unshift()
8. n >>= 1이 실행되어 n=0010 >> 1 = 0001이 됩니다.
9. 루프는 n=1로 계속됩니다. 네 번째 반복에서는 (0001 & 0001) = 0001, 즉 이진수 1입니다. 이 값은 rst 앞에 추가됩니다.
10. n >>= 1이 실행되어 n=0001 >> 1 = 0000이 됩니다.
11. 'n'이 이제 거짓(0)이므로 루프가 종료됩니다.