JavaScript Tutorial.49

ansunny1170·2022년 1월 3일
0
post-thumbnail

JS BITWISE OPERATIONS

JavaScript Bitwise Operators

OperatorNameDescription
&ANDSets each bit to 1 if both bits are 1
ORSets each bit to 1 if one of two bits is 1
^XORSets each bit to 1 if only one of two bits is 1
~NOTInverts all the bits
<<Zero fill left shiftShifts left by pushing zeros in from the right and let the leftmost bits fall off
지정한 수만큼 비트를 전부 왼쪽으로 이동시킴
>>Signed right shiftShifts right by pushing copies of the leftmost bit in from the left, and let the rightmost bits fall off
부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킴
>>>Zero fill right shiftShifts right by pushing zeros in from the left, and let the rightmost bits fall off
지정한 수만큼 비트를 전부 오른쪽으로 이동시키며, 새로운 비트는 전부 0이됨

EXAMPLES

OperationResultSame asResult
5 & 110101 & 00010001
5 | 150101 | 00010101
~ 510~01011010
5 << 1100101 << 11010
5 ^ 140101 ^ 00010100
5 >> 120101 >> 10010
5 >>> 120101 >>> 10010

JavaScript Uses 32 bits Bitwise Operands

JavaScript는 숫자를 64비트 부동 소수점 숫자로 저장하지만 모든 비트 연산은 32비트 이진수에서 수행된다.

비트 연산이 수행되기 전에 JavaScript는 숫자32비트 부호 있는 정수로 변환한다.

비트 연산이 수행된 후 결과는 64비트 JavaScript 숫자로 다시 변환된다.

위의 예에서는 4비트의 부호 없는 이진수를 사용했다. 이 때문에 ~ 510을 반환한다.

JavaScript는 32비트 부호 있는 정수를 사용하므로 10을 반환하지 않고 -6을 반환할 것이다.

0000 0000 0000 0000 0000 0000 0000 0101 (5)

1111 1111 1111 1111 1111 1111 1111 1010 (~5 = -6)

부호 있는 정수는 가장 왼쪽 비트를 음수(빼기) 기호로 사용한다.

Bitwise AND

한 쌍의 비트에 대해 비트 AND를 수행하면 두 비트가 모두 1이면 1을 반환한다.

Bitwise OR

한 쌍의 비트에 대해 비트 OR를 수행하면 두 비트 중에 하나가 1이면 1을 반환한다.

Bitwise XOR

한 쌍의 비트에 대해 비트 XOR를 수행하면 두 비트의 값이 다르면 1을 반환한다.

JavaScript Bitwise AND (&)

비트 연산자 AND는 두 비트가 1일 때 1을 반환한다.

JavaScript Bitwise OR (|)

비트 연산자 OR는 두 비트 중 하나 이상이 1일 때 1을 반환한다.

JavaScript Bitwise XOR (^)

비트 연산자 XOR은 두 비트가 다를 때 1을 반환한다.

JavaScript Bitwise NOT (~)

JavaScript (Zero Fill) Bitwise Left Shift (<<)

모든 bit를 왼쪽으로 shift 시키고 맨 오른쪽에는 0으로 채우고, 맨 왼쪽의 bit는 삭제한다.
5 << 1 : 5에 대응하는 bit를 왼쪽으로 1만큼 shift 시킨다.

JavaScript (Sign Preserving) Bitwise Right Shift (>>)

이것은 오른쪽 시프트를 유지하는 기호이다. 맨 왼쪽 비트값을 복사하여 맨 왼쪽에 추가하고, (복사본이 왼쪽에서 밀려 들어가고) 맨 오른쪽 비트가 사라진다.

부호를 유지시킨다?

JavaScript (Zero Fill) Right Shift (>>>)

맨 왼쪽에 0을 추가하고, 맨 오른쪽 값을 삭제한다.

Binary Numbers

1 bit 세트만 있는 이진수는 이해하기 쉽다:

몇 bit를 더 설정하면 이진 패턴이 나타난다:

JavaScript 이진수는 2의 보수 형식으로 저장된다.

보수란, '두 수의 합이 진법의 밑수(N)가 되게 하는 수'를 말한다. 예를 들어 10진수 4의 10의 보수는 6이고, 10진수 2의 10의 보수는 8이다. 보수는 컴퓨터에서 음의 정수를 표현하기 위해서 고안되었다. 컴퓨터 내부에서는 사칙연산을 할 때 덧셈을 담당하는 가산기(Adder)만 이용하기 때문에 뺄셈은 덧셈으로 형식을 변환하여 계산해야 한다. 즉 컴퓨터 내부에서는 A - B를 계산할 때 B의 보수(-B)를 구한 다음 A + (-B)로 계산하는 것이다.

▶ 1의 보수 : 각 자릿수의 값이 모두 1인 수에서 주어진 2진수를 빼면 1의 보수를 얻을 수 있다.
예시 ) 2진수 1010의 1의 보수는 0101이다.

▶ 2의 보수 : 1의 보수1을 더한 값과 같다.
예시 ) 2진수 1010에 대한 2의 보수를 구하려면 2진수 1010에 대한 1의 보수 0101을 구한 다음 1을 더해 0110을 얻는다.

출처: 안경잡이개발자

Converting Decimal to Binary

  • dec >>> 0 으로 bit화 시켜주고, toString(n)으로 n진화 해준다 맞나
<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Convert Decimal to Binary</h2>

<p id="demo"></p>
<p id="demo1"></p>
<script>
document.getElementById("demo").innerHTML = dec2bin(-5);
function dec2bin(dec){
  return (dec >>> 0).toString(2);
}

document.getElementById("demo1").innerHTML = (5 >>> 0).toString(2);
</script>

</body>
</html>

Converting Binary to Decimal

parseInt()

출처: 어제 오늘 내일

  • parseInt(string, radix);

파라미터
string
- 숫자로 변환할 문자열
radix
- optional
- string 문자열을 읽을 진법(수의 진법 체계의 진법)
- 2~36의 수

리턴 값
- string을 정수로 변환한 값을 리턴합니다. 만약, string의 첫 글자를 정수로 변경할 수 없으면 NaN(Not a Number) 값을 리턴합니다.

  • parseInt("10"); // 10
    문자열 "10"을 숫자로 변환하여 정수 10을 리턴합니다.

  • parseInt("-10"); // -10
    문자열 "-10"을 숫자로 변환하여 정수 음수 -10을 리턴합니다.

  • parseInt("10.9"); // 10
    문자열 타입의 실수값은 소수점을 제거한 후, 정수값만 리턴합니다.

  • parseInt(10); // 10
    파라미터로 문자열이 아닌 다른 타입의 값이 전달되면, 파라미터를 문자열로 변환하여 처리합니다.

  • parseInt("10n"); // 10
    parseInt("10nnn13"); // 10
    문자열의 첫글자가 숫자이고, 그 이후에 숫자가 아닌 다른 문자열이 나올 경우, 숫자가 아닌 문자 이후의 값은 무시하고, 그 이전의 숫자만 정수로 변환합니다.

  • parseInt(" 10"); // 10
    문자열의 첫글자는 반드시 숫자여야 하지만, 처음에 오는 공백 문자는 허용됩니다.

  • parseInt("10 "); // 10
    문자열의 첫글자가 숫자이면, 뒤에 오는 공백은 무시됩니다.

  • parseInt("k10"); // NaN
    문자열의 첫글자가 숫자가 아니면, NaN(Not a Number)를 리턴합니다.

  • parseInt(""); // NaN
    문자열에 공백이 입력되면, 문자열의 첫 글자가 숫자가 아니므로, NaN(Not a Number)를 리턴합니다.

profile
공정 설비 개발/연구원에서 웹 서비스 개발자로 경력 이전하였습니다. Node.js 백엔드 기반 풀스택 개발자를 목표로 하고 있습니다.

0개의 댓글