간단한 비트 조작
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을 확인하십시오.
Reference
이 문제에 관하여(간단한 비트 조작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/santispavajeau/simple-bit-manipulation-516i텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)