220624 TIL

Parker.Park·2022년 6월 24일
0

TIL

목록 보기
23/39

220624 TIL

조금씩 조금씩 쌓여가고는 있지만, 이 속도가 적당한지.. 이렇게 공부하는게 맞는지 확신은 점점 묽어져만 간다. 한 야구선수가 부상 때문에 은퇴 후 체육교사가 되었다는 유투브를 봤다. 많은 동기부여가 되었다.

Vertical bar or Bitwise OR(|)

알고리즘 풀이를 보던 중 |표시를 보게 되었다. 처음에는 ||표시(OR)인 줄 알았다. 차이점을 정리해 보자.

  • Logicla OR(||)
    우리가 흔히 알고 있는 OR 연산자 이다.
const a = 3
const b = 1

if(a > 0 || b > 3){
  console.log(true)
}
//true

조건 중 한가지라도 true이면 true를 반환한다.

  • Bitwise OR(|)
    상응하는 비트 포지션(0과 1로 이루어진)에서 한 개라도 '1'이면 1을 반환한다고 한다. 정리하자면 정수를 이진수로 표현한 수를 비교하여 각 자리에 '1'을 모두 반환한 셈이라고 이해했다.
    이 함수는 최대 32 비트의 정수를 바꾼다고 하고, 32 비트가 넘어가는 비트들은 버린다고 한다.
    예시를 보자.
const a = 9 //(00000000000000000000000000001001)
const b = 14 //(00000000000000000000000000001110)

console.log(a | b) //15(00000000000000000000000000001111)

논리연산자(||,&&...)와 같이 비트연산자라고 OR(|)연산자 외에 다양한 것이 있다고 한다.(참조사이트 : Article | [JS] 비트 연산자(bitwise operator)jeongs)
이런 기능이 있구나 싶었는데, 문득 음수는 어떨까? 라는 궁금증이 생겼다.

자바스크립트의 음수 표현

JS는 모든 숫자를 64비트 부동소수점 방식으로 저장하지만, 비트 연산을 수행 할 때는 32비트 정수로 변환해 연산 후 다시 64비트로 변환해 저장한다고 한다. IEEE-754라고 하는 부동소수점을 표현하는 표준이라고 한다. 여기에서는 32비트 기준으로 예를 들도록 하려고 한다.

음수를 표현하는 방식

컴퓨터에서 음수를 쓰는 방식이 여러가지가 있다고 한다.

  • 부호 절대값 방법(Sign Magnitude)
    부호 비트를 제외한 수를 양수값으로 읽고, 부호비트에 따라가 +, -를 인식하는 방법이라고 한다. 문제점으로는 이진수 계산이 힘들어진다고 하여 컴퓨터에서는 사용 안된다고 한다.
//예시는 4비트 기준이다.

2 (base 10) = '0010' 
-2 (base 10) = '1010' 
1 (base 10) = '0001'
-1 (base 10) = '1001'
  • 1의 보수방법(1's Complement)
    양수값의 비트를 반전시켜서 음수를 표현하는 방법이라고 한다. 0은 1로, 1은 0으로 변환한다고 한다. -0과 +0인 경우가 존재하기 때문에 컴퓨터에서는 역시 사용하지 않는다고 한다.
//예시는 4비트 기준이다.

1 (base 10) = '0001'
-1 (base 10) = '1110'
  • 2의 보수방법(2's Complement)
    1의 보수값에 +1을 한 값을 사용하며, -0이 없어지기 때문에 이 방법으로 음수를 표현한다고 한다.
//예시는 4비트 기준이다.

1 (base 10) = '0001'
-1 (base 10) = '1111'
2 (base 10) = '0010'
-2 (base 10) = '1110'

Bitwise OR(|) 음수 이해

이제는 조금은 이해 될거 같다. 아래 예시를 통해 마무리 짓겠다.

const a = -3 //(11111111111111111111111111111101)
const b = 3 //(00000000000000000000000000000011)
const c = a | b //(11111111111111111111111111111111)

console.log(c) // -1

마치면서

비트연산자, 보수 표현에 대해서 배운시간이었다. 부동소수점 표기방법에 대해서는... 다음을 기약하기로 하였다.

참조

[Bitwise OR (|), MDN, 2022년06월24일]
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_OR
[Article | [JS] 비트 연산자(bitwise operator)jeongs, velog, 2022년06월26일 접속]
https://prod.velog.io/@jeongs/Article-%EB%B9%84%ED%8A%B8-%EC%97%B0%EC%82%B0%EC%9E%90
[자바스크립트 숫자 표현 방식, velog, 2022년06월26일 접속]
https://imcts.github.io/javascript-exponent-expression/

profile
개발자준비중

0개의 댓글