간단한 비트 조작

7234 단어 algorithmsjavascript
과거 알고리즘을 보다가 << , >> , & , | , ^ 과 같은 비트 연산자를 볼 때마다 "이건 너무 복잡하다"고 생각했습니다. 그러나 시간이 지남에 따라 새로운 개념을 받아들일 수 있고 도달할 수 없는 것을 멈출 수 있기 때문에 학습은 놀랍습니다.

간단히 말해서 이것들은 일부 '이진 숫자'입니다. 1을 왼쪽으로 이동하면 이전 숫자에 2를 곱합니다.

0001 is 1
0010 is 2
0011 is 3 // 3 is 2 and 1 combined
0100 is 4


이진수를 일반 숫자(십진수)로 변환하는 이유를 자세히 알아보려면 check this out.

이러한 기본 사항을 고려하여 바이너리 또는 bit manipulation 작업을 수정하거나 다른 숫자를 비교할 수 있으며 바이너리로 변환된 문자에서도 동일한 작업을 수행할 수 있습니다.

따라서 비트 연산자는 수학 연산자 또는 논리 연산자와 유사하지만 이진수를 처리합니다.

비트 연산의 빠른 예로서 2<<1을 수행하면 결과는 4입니다. 이는 왼쪽 시프트 <<이 이진수의 모든 1비트를 왼쪽으로 이동하는 역할을 하기 때문입니다.

2 which is 0010

moves left and becomes

4 which is 0100


따라서 왼쪽 시프트 << 1은 1칸, 2배가 됩니다.

오른쪽 시프트 >> 1과 동일하며 단순히 2로 나눕니다.

이제 다른 작업 & | ^ 또는 ~ . 두 개의 이진수를 비교할 수 있습니다.

문자를 바이너리에 매핑



따라서 이를 달성하기 위해 문자에는 ASCII 코드라고 하는 해당 숫자 코드가 있음을 기억해야 합니다. 자바스크립트에서는 .charCodeAt() 메소드로 이 코드를 얻을 수 있습니다.

예를 들어 소문자 'a'는 ASCII 코드가 97이고 소문자 'b'는 98입니다.

그런 다음 ASCII 코드에 해당하도록 비트를 이동하여 문자를 바이너리에 매핑할 수 있습니다.

let anumberOfLeftShifts = 'a'.charCodeAt(0) - 97 // returns 0 bc 97 - 97

let aInBinary = 1 << anumberOfLeftShifts
// => 0001

let bnumberOfLeftShifts = 'b'.charCodeAt(0) - 97 // returns 1 bc 98 - 97

let aInBinary = 1 << bnumberOfLeftShifts
// => 0010



따라서 숫자와 문자를 바이너리에 매핑하는 것은 다른 프로세스이지만 두 가지 방법 모두 비트 조작을 허용합니다.

빠른 예를 들어 두 문자열의 문자가 같은지 확인할 수 있습니다.

let s1 = "hello"
let s2 = "loeh"

let s1Mask = 0
let s2Mask = 0

for(let i = 0;i<s1.length; i++){
 s1Mask = s1Mask | 1 << targetString[i].charCodeAt(0) - 97
// add each character to as a bit in corresponding position to mask
}

for(let i = 0;i<s2.length; i++){
 s2Mask = s2Mask | 1 << targetString[i].charCodeAt(0) - 97
// add each character to as a bit in corresponding position to mask
}

if(s1Mask & s2Mask === s1Mask){
 // compare masks to see if all bits match
 // by comparing the result of an AND bitwise operation
 // to the original mask
 console.log('strings have the same letters')
}


비트 비교에서 비트 연산자가 수행하는 작업 목록은 다음과 같습니다.
  • & 그리고 같은 경우 같은 비트를 반환하고 다르면 0을 반환합니다.
  • | 또는 동일한 경우 동일한 비트를 반환하고 다른 경우 1을 반환합니다.
  • ^ XOR이 같으면 0을, 다르면 1을 반환

  • 아이디어/의견이 있는 경우 또는 에서 연락하거나 내 portfolio을 확인하십시오.

    좋은 웹페이지 즐겨찾기