<<
,>>
)&
,|
는 너무 잘 아니 패스하고
^
는 두 인자(비트)값이 서로 달라야 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 를 뜻한다. 이것을 가지고 유니코드의 코드 번호를 식별하여 한국어인지 혹은 영어인지 또는 다른 특수문자인지를 구별하는 것이다.