0403 TIL : 비트 연산

Clear·2023년 4월 2일
0

Daily Posting

목록 보기
15/27

AND연산자

const a = 5; // 0101
const b = 3; // 0011
const c = a & b; // 0001
console.log(c); // Output: 1

오른쪽 시프트(>>)

const a = 10; // 1010
const b = a >> 2; // 0010
console.log(b); // Output: 2

AND와 오른쪽 시프트 결합

const a = 10; // 1010
const b = 3; // 0011
const c = (a & b) >> 1; // 0001 >> 1 = 0000
console.log(c); // Output: 0

숫자n을 길이가 N인 이진수로 변환하는 함수

function toBinary(n, N) {
  const rst = [];
  
  while (n) {
    rst.unshift(n & 1); // 1. n의 이진수 1의 자리를 비교해서 넣고,
    n >>= 1;		    // 2. n의 비트를 오른쪽으로 한 칸 민다. 2**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)이므로 루프가 종료됩니다.

0개의 댓글