1 분 소요

비트 연산자란?

10진수 데이터를 2진수로 계산하는 연산자다.

  • 컴퓨터는 전기적 신호로 정보를 전달하므로 전류가 흐르는 스위치인 on(1)/off(0)로 신호를 전달한다.
  • 2진수는 0과 1로 표현된다.
  • 표현되는 하나의 값을 비트라고 하며 비트(bit) 8개를 바이트(byte)라고 한다.
    • 1byte는 의미있는 정보 하나를 표현한는 최소단위!


bit의 구성

  • 맨 앞의 비트를 최상위 비트(Most Significant Bit, MSB)라고 표현한다.
    signed bit = MSB가 부호를 나타내는 경우
    • 0은 양수
    • 1은 음수

    unsigned bit = 그렇지 않는 경우

  • 맨 뒤의 비트를 Least Significant Bit(LSB)라고 한다. 2^0에 위치하므로 데이터에 들어있는 숫자가 짝수인지 홀수인지 알아낼 수 있다.

  • n bit일 경우 2^n개의 값을 저장할 수 있다. 최대값 = 2^(n-1)-1 최소값 = -2^(n-1)
ex)
4bit일 경우
2^4개의 값을 저장할 수 있다. 그 중에 MSB이 부호를 나타낸다.
최대값은 2^3-1 = 7
최소값은 -2^3 = -8


비트 덧셈

10진수와 같이 10보다 크면 올림과 같이 2진수는 합쳤을 때 2보다 크면 1을 올린다. 음수 끼리의 덧셈도 마찬가지다. 두 수의 MSB가 같으면 결과값도 MSB가 같기 때문에 문제 없다.

비트 뺄셈

부호가 서로다른 덧셈에서는??
컴퓨터는 덧셈만 가능하므로 뺄셈은 보수를 이용해 덧셈으로 바꾼다. 2 - 32 + (-3)[3의 보수] 으로 바꿈

음수와 양수의 계산에서 보수(보충해주는 수) 라는 개념이 나온다.
n진수에 대해서 n의 보수와 n-1의 보수가 존재한다.

2진수에서 2의 보수는 두 수를 더하게 되면 최대 비트 크기보다 크면서 가장 작은 2의 거듭제곱 수가 나온다.



~연산자는 1의 보수로 변환 시키는 것이다. 예를 들어 2의 ~2값은 -3이다. 0010 => 1101
맨 앞의 MSB는 1이므로 음수이고, 음수일 경우 양수에서 읽는 것과 반대로 읽으면 0이 2의 값이고 양수와 달리 음수는 0이 존재하지 않으므로 2보다 +1 한 3값이고 음수이므로 -3이 된다.

2에 대한 1의 보수는 1101으로 -3이고 2에 대한 2의 보수는 1110으로 -2이다.

2+(-2)는

    0010
+   1110
--------
   10000

으로 최대 비트 크기보다 크면서 가장 작은 2의 거듭제곱 수가 나온다.


비트 연산

AND
    xxxx    xxxx    xxxx
&   1111    0000    xxxx
--------- ------- -------
    xxxx    0000    xxxx
OR
    xxxx    xxxx    xxxx
|   1111    0000    xxxx
--------- ------- -------
    1111    xxxx    xxxx
XOR

다른 값이면 1 같은 값이면 0

    xxxx    xxxx    xxxx
^   1111    0000    xxxx
--------- ------- -------
  ~ xxxx    xxxx    0000