본문 바로가기

카테고리 없음

비트 연산과 비트벡터 그리고 집합으로의 표현

2진수 표현binary representation


컴퓨터과학에서 2진법이란 굉장히 중요한 개념입니다. 컴퓨터가 다루는 모든 데이터는 2진수로 표현이 되기 때문이죠.

사실 2진수로 표현된다기 보다는 , 비트 수준에서 표현이 된다는 말이 더 정확하겠네요. 그 비트 수준의 표현이 2진수로 다루어 지는 것이구요.

비트 수준의 표현법을 2진법 표현법처럼 보는 시야는 컴퓨터 과학에서 굉장히 중요합니다. 



이 2진법을 이루는 0과 1에 대한 논리수학은 조지 불(George Boole)이라는 영국 수학자에 의해 연구되었습니다.

또한 그의 이름을 따서 논리대수학을 Boolean Algebra라고 부릅니다. 이 논리대수학에서는 0을 거짓, 1을 참으로 해석합니다.


이 논리수학에서는 크게 4가지 논리연산 AND , OR , XOR , NOT이 존재합니다.


AND연산은 두개의 피연산자를 요구합니다. 두 피연산자가 모두 참일 경우 참을 반환하게 됩니다.

1 & 1 = 1

1 & 0 = 0


OR연산은 두개의 피연산자를 요구합니다. 두 피연산자중에 적어도 하나가 참일 경우 참을 반환하게 됩니다.

1 | 0 = 1

0 | 1 = 1

1 | 1 = 1

0 | 0 = 0



XOR연산은 두개의 피연산자를 요구합니다. 좀 특이한데, 두 피연산자중에 딱 하나만 참일 경우 참을 반환하게 됩니다.

1 ^ 0 = 1

0 ^ 1 = 1

1 ^ 1 = 0

0 ^ 0 = 0


마치 음수를 곱하는 느낌이라고 생각하면 될 것 같습니다. 두 수를 곱할 때, 한쪽만 음수이면 결괏값은 음수이지만 둘다 음수이면 양수가 되버리는거죠. 또한 둘다 애초에 양수였으면 결과도 양수이구요.


NOT연산은 하나의 피연산자를 요구합니다. 참의 값을 거짓으로, 거짓의 값을 참으로 바꿔버립니다.

~1 = 0

~0 = 1




비트벡터표현


비트벡터표현은 별게 아니고 2진수표현법과 거의 동일합니다. 다만 2진수처럼 다루겠다는 것이 아닌, 비트로써 다루겠다는 것이죠.

예를 들어 4비트로 표현된 10이라는 정수값을 비트벡터로 표현하면 다음과 같습니다.


[1010]


2진법 표현과 굉장히 흡사하지만 , 실제적인 메모리공간에 비트로 표현된다는 점이 다릅니다. 비트 벡터로 표현하기 위한 1과 0이지, 실질적인 수가 아니라는 말입니다.


좀더 일반화해서 길이가 w인 비트를 비트벡터로 표현하면 다음과 같습니다.


[a(w-1),a(w-2)... ,a(0)]


어려워 보이지만 별 것 아니고 그냥 일반화해놓은 것 뿐입니다.


자 이제 비트벡터를 이용해서 논리연산을 해보겠습니다. 두가지 비트벡터 a와 b는 다음과 같습니다.

a = [1100] , b = [1010]


a와 b의 논리연산 AND,OR,XOR 그리고 a의 NOT은 다음과 같습니다.


  1100

&1010

---------

  1000



  1100

|  1010

=======

   1110


  1100

^1010

=======

  0110



~ 1100

======

   0011



비트벡터 a와 b의 각각의 비트끼리 논리연산이 진행되었습니다.






비트벡터의 집합표현


비트벡터를 유한집합으로 표현할 수 있는데 , 이렇게 표현하게 되면 좀 더 직관적이게 됩니다.


-----글 쓰다가 말았음----