ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Section 9. 자바스크립트 2, 8, 16진법과 비트 연산자
    자바스크립트 2023. 4. 6. 16:27

    I. 다른 진법들

    2진법 binary

    0b 뒤로 숫자 0, 1를 붙여 표현하는 진법이다. 

    [
      0b1,
      0b10,
      0b11,
      0b100,
      0b101
    ].forEach(i => console.log(i))
    //1
    //2
    //3
    //4
    //5

    2진법으로 forEach문을 돌렸지만 출력될 때는 10진법으로 표현이 된다. 

    표현을 달리 했을 뿐, 자바스크립트 내부에서는 같은 숫자로 인식한다.

     

    8진법 octal

    0o 뒤로 숫자 0~7를 붙여 표현하는 진법이다.

    [
      0o7,
      0o10,
      0o100,
      0o1000,
    ].forEach(i => console.log(i))
    //7
    //8
    //64
    //512

     

    16진법 hexadecimal

    0x 뒤로 숫자 0~9, A~F를 붙여 표현하는 진법이다.

    [
      0x9,
      0xA,
      0xB,
      0xC,
      0xd,
      0xe,
      0xf,
      0x10,
      0xFFFFFF
    ].forEach(i => console.log(i))

    진법 간 변환하는 방법

     

    const num = 123456789;
    
    const binStr = num.toString(2);
    const octStr = num.toString(8);
    const hexStr = num.toString(16);
    
    console.log(binStr, octStr, hexStr);
    //111010110111100110100010101 726746425 75bcd15
    console.log(
      parseInt(binStr, 2),
      parseInt(octStr, 8),
      parseInt(hexStr, 16)
    ); //123456789 123456789 123456789

    이 외에도 2~36 사이의 진법 사용이 가능하다. 

     

    II. 비트 연산자들

    let x = 0b1010101010; // 682
    let y = 0b1111100000; // 992
    const bitAnd = x & y;
    
    console.log(bitAnd); //672
    console.log(
      bitAnd.toString(2)
    ); //1010100000

    비트 AND 연산자는 x&y이다. 

    각 자리에서 한 자리씩 x 와 y를 비교하면서 둘 다 1이면 1을 반환하고 아니면 0을 반환한다.

     

    const bitOr = x | y
    
    console.log(bitOr); //1002
    console.log(
      bitOr.toString(2)
    ); //1111101010

    비트 OR 연산자는 x|y이다. 

    각 자리에서 한 자리씩 x 와 y를 비교하면서 한 쪽이라도 1이면 1을 반환한다.

     

    const bitXor = x ^ y;
    
    console.log(bitXor); //330
    console.log(
      bitXor.toString(2) 
    ); //101001010

    비트 XOR 연산자는 x^y이다.

    각 자리에서 한 자리씩 x 와 y를 비교하면서 어느 한쪽만 1일 때 1을 반환한다.

     

    console.log(~x); //-683
    console.log(
      (~x).toString(2)
    ); //-1010101011

    각 비트를 반전시키는 연산자는 ~ 이다.

     

    let x = 0b101; // 5
    
    console.log(x.toString(2), x); //101 5
    x = x << 1;
    
    console.log(x.toString(2), x); //1010 10

    예시에서 x의 자릿수를 왼쪽으로 1만큼(한 자리수만큼) 옮겼다. 즉, 101에서 한자리만큼 왼쪽으로 옮기니까 뒤에 0이 붙어서 1010이 되는 것이다. 그리고 특이사항으로 왼쪽으로 값이 1칸 옮겨질 때마다 x의 값이 2배 증가한다. 

    x = x >> 1;
    
    console.log(x.toString(2), x); //10 2

    예시에서 x의 자릿수를 오른쪽으로 1만큼 옮겼다. 즉, 101에서 10이 되는 것이다. 그리고 오른쪽으로 값이 1칸 옮겨질 때마다 x의 값이 반으로 감소한다. 

     

    >>, <<와 같은 연산자를 쉬프트 연산자라고 한다.

Designed by Tistory.