JS byte 측정하기 (feat.비트연산)

강정우·2023년 4월 16일
0

JavaScript

목록 보기
40/53

비트연산

  • 비트 연산자(bitwise operator)
    비트 연산자는 비트(bit) 단위로 논리 연산을 할 때 사용하는 연산자이다.
    또한, 비트 단위로 전체 비트를 왼쪽이나 오른쪽으로 이동시킬 때도 사용한다.(<<,>>)

  • &,|는 너무 잘 아니 패스하고

  • ^는 두 인자(비트)값이 서로 달라야 1(true), 아니면 0(false)이다.

  • ~는 JS의 !연산자와 같다.

>>, << 연산자

  • 해당 연산자가 바로 비트 연산의 꽃이라 볼 수 있다.

  • 우선 우리가 사용하는 수는 10진수, 컴이 사용하는 진수는 2진수이다. 그렇다면 10진수를 2진수로 바꾸는 작업을 해주면 조금 더 이해하기 편하다.

15 : 00000000 00000000 00000000 00001111

30 : 00000000 00000000 00000000 00011110

60 : 00000000 00000000 00000000 00111100

120 : 00000000 00000000 00000000 01111000
  • Long을 표현할 수 있는 메모리가 있다고 가정해보자. 그렇다면 << 연산자를 통하면 전체 비트를 한 칸 씩 옆으로 이동시킨다. 이는 각각 곱하기 2를 한 것과 같기도 하다.

  • 헷갈린다면 예시들 들어보자.

#include <stdio.h>

int main(void)
{
	int num01 = 8;
	
	printf(num01 << 1);		// 16
	printf(num01 >> 1);		// 4
	
	printf(num01 << 2);		// 32
	printf(num01 >> 2);		// 2
	
	printf(num01 << 3);		//64
	printf(num01 >> 3);		// 1
	
	printf(num01 << 4);		// 128
	printf(num01 >> 4);		// 0
	
	return 0;
}
  • 그렇다는 것은 위 식을 아래 그림과 같다고도 볼 수 있다.

  • 따라서 위 연산식을 이해하면 아래 코드를 작성할 수 있다.

비트 연산기

methods: {
  inputTrigger(e,s,b,i,c) {
    this.inputData = e.target.value;
    s=this.inputData
    for(b=i=0;s.charCodeAt(i);i++){
      c = s.charCodeAt(i);
      b+=c>>11?3:c>>7?2:1;
    }
    this.bytes = b;
  }
},
  • >>11 은 2의 11승 즉, 2048를 뜻하면 2의 7승은 128 를 뜻한다. 이것을 가지고 유니코드의 코드 번호를 식별하여 한국어인지 혹은 영어인지 또는 다른 특수문자인지를 구별하는 것이다.
  • 그리고 위 비트 연산기를 사용하면 각각의 성능은 아래와 같다고 한다.

Ref

profile
智(지)! 德(덕)! 體(체)!

0개의 댓글