brunch

You can make anything
by writing

C.S.Lewis

by 이경종 Mar 16. 2020

Ch3-2. 기초적인 비트연산

데이터 프로세싱(Data Processing)은 데이터를 사용하기 위해 가공하는 것을 말한다.

임베디드 소프트웨어 역시 하드웨어를 주로 다루지만, 본질은 소프트웨어이므로 기본적인 소프트웨어 개발의 요소들을 이해하는 것은 필수적이다. 소프트웨어에서 데이터를 어떻게 다루는지 알아야 한다. 디지털 세계에서 데이터는 결국 숫자고 이진코드다. 0과 1로 표현되는 2진법이 기초고, 그 다음이 16진법이다.


2진법으로 나타낸 숫자, 코드를 binary code라고 하고, 16진법으로 나타낸 데이터를 hex code라고 한다.


실제 프로그래밍시 데이터시트나 문서에서 2진수는 대게 다음과 같은 형식으로 표현한다.

b00110001 --> 앞에 b를 붙이거나 뒤에 b를 붙여 이진수임을 나타낸다.


16진수는 hAB1C와 같이 표기하기보다는 0x를 붙여서 0xAB1C와 같이 표기한다. 코딩을 많이 하다보면 2진수와 16진수, 그리고 10진수사이를 왔다갔다하는 것은 빈번한 일이니 금방 익숙해질수밖에 없다.


비트연산에 대해 간단하게 알아보자(중요한 거니깐)

비트연산은 어느 프로그래밍 언어나 동일하다. 일단은 &(AND), | (OR), >> 또는 <<(SHIFT)만 알면 된다.


A&B는 A에다가 B를 마스킹(MASKING)하는 것이다. 논리부호 AND는 교집합을 의미하는 거 알고 있죠잉?

아래 문제를 풀어보자.


0x1234 & 0x4321 = ?


연산을 하기 위해서는 데이터를 이진수로 먼저 바꿔야 한다.


     0x1234 ==> b 0001 0010 0011 0100

&  0x4321 ==> b 0100 0011 0010 0001   

------------------------------------------------

     0x0220 <== b 0000 0010 0010 0000



| (OR) 는  +와 비슷하지만, 1+1은 2가 아니라 1이라는 것을 이해하자


     0x1234 ==> b 0001 0010 0011 0100

|    0x4321 ==> b 0100 0011 0010 0001   

------------------------------------------------

     0x5335 <== b 0101 0011 0011 0101


SHIFT는 비트를 왼쪽이나 오른쪽으로 이동시키는 것이다. 

이는 2로 나누거나 곱하는 것과 같다. << x 는 2를 x번만큼 곱하는 거고, >> x는 2로 x번만큼 나누는 것과 같다.

이 역시 비트연산이므로 이진수로 바꿔서 계산하면 된다. 다음 문제를 풀어보자.


0x1234 >> 3 = ?


이것은 비트자리수를 오른쪽으로 3번 쉬프트시키는 것이므로, 2로 세번 나누는 것과 같은 결과다.


   b 0001 0010 0011 0100 >> 3

= b 0000 1001 0001 1010 >> 2  

= b 0000 0100 1000 1101 >> 1

= b 0000 0010 0100 0110

= 0x0243 


msb(most significant bit, 가장 높은 자리의 비트)가 0으로 채워지면서 lsb(least significant bit, 가장 낮은 자리의 비트)가 삭제된다. msb와 lsb는 많이 나오는 용어이므로 익숙해지자. 보통 대문자로 표현해서 MSB, LSB라고 하면 비트가 아닌 바이트를 말한다. <끝>


졸저 <개발자 오디세이아> 가 책으로 나왔습니다. 개발자들의 애환과 희망을 담으려 최선을 다했습니다. 많은 사랑 부탁드립니다^^


작가의 이전글 Ch3-1. 인코딩과 디코딩
작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari