안녕하세요, C 프로그래밍 언어 열다섯번째 강의입니다.

지난 강의는 컴퓨터가 정수형 변수와 실수형 변수를 어떻게 저장하는 지 이진법 단위에서 살펴보았습니다.


이번 시간은 이와 관련한 비트 연산자에 대해 다루어보겠습니다. 



연산자 강의 때 한번 보았던 비트 연산자 목록입니다.

비트 연산자는 NOT 연산자, AND 연산자, OR 연산자, XOR 연산자, 좌우 시프트로 구성되어있습니다.



NOT 연산자란 모든 비트를 반전시킵니다.

0은 1로, 1은 0으로 바꾸어줍니다.

 


AND 연산자는 말 그대로 AND 연산을 합니다.

AND 연산이란 두 항이 모두 1인 경우 결과값으로 1을 반환합니다.

그 이외의 경우 결과값으로 0을 반환합니다.



OR 연산자는 말 그래도 OR 연산을 합니다.

OR 연산이란 두 항 중 최소 하나라도 1인 경우 결과값으로 1을 반환합니다.

만약 두 항 모두 0인 경우 결과값으로 0을 반환합니다.



XOR 연산자는 배타적 논리합인 Exclusive or의 약어입니다.

XOR 연산이란 두 항 중 단 하나만 1인 경우 결과값으로 1을 반환합니다.

만약 두 항이 같은 수인 경우 결과값으로 0을 반환합니다.



시프트 연산은 비트의 열을 그대로 좌우로 움직입니다.

비트 왼쪽 시프트 연산자는 정해진 숫자만큼 피연산자를 왼쪽으로 이동시킵니다.

왼쪽으로 이동시키면서 가장 오른쪽 비트는 0으로 채워집니다.

기존에 있던 가장 왼쪽 비트는 왼쪽으로 밀려나가면서 사라집니다.



비트 오른쪽 시프트 연산자는 정해진 숫자만큼 피연산자를 오른쪽으로 이동시킵니다.

오른쪽으로 이동시키면서 가장 왼쪽 비트는 0으로 채워집니다.

기존에 있던 가장 오른쪽 비트는 오른쪽으로 밀려나가면서 사라집니다.


비트 연산자는 보통의 연산자들보다 사용 빈도수가 매우 떨어집니다.

어쩌면 앞으로 한번도 안쓸수도 있습니다.

하지만 컴퓨터는 2진법과 매우 가깝다는 점에 있어 꼭 알아야할 연산자이며, 추후에 복잡한 계산을 간단하게 만들 수 있습니다.

컴퓨터에서 모든 연산은 이 비트 연산자에 기초를 두고 있으며 컴퓨터의 원리를 파악하기에도 좋은 비트 연산자입니다.


그러니 꼭 복습하시고 익히시길 바랍니다.


'Computer Science > C' 카테고리의 다른 글

Chapter 14. 실수 표현법  (0) 2018.04.27
Chapter 13. 정수 표현법  (0) 2018.04.26
Chapter 12. 진법  (0) 2018.04.24
Chapter 11. 연산자 우선순위  (0) 2018.04.19
Chapter 10. 연산자 실습  (0) 2018.04.18


안녕하세요, C 프로그래밍 언어 열두번째 강의입니다.

오늘은 쉬어가는 시간으로 아주 간단한 진법(진수)에 관하여 짚고 넘어가겠습니다.



진법과 관련된 재밌는 인용구입니다. 과연 누구는 웃고 있고, 누구는 웃지 못하고 있나요?

웃지 못하는 당신은 오늘 강의를 집중하셔야합니다.



진법(진수)란 숫자를 세는 법이라고 생각하시면 편합니다.

위의 4가지 뿐만아니라 용도와 목적에 맞게 여러가지 진법을 사용할 수 있습니다.

하지만 컴퓨터프로그래밍에서는 2진법과 8진법, 16진법을 기억하셔야합니다.

10진법은 위 세가지를 이해하기위한 쉬운 수단으로 생각하시면 됩니다.



먼저, 10진법입니다. 저희가 일상 생활에서 흔히 사용하고 있는 숫자 체계로써 한 자리에 0~9를 넣어 원하는 숫자를 만들죠.

10진법을 널리 사용하게 된 큰 이유 중 하나는 우리의 손가락이 10개라서 랍니다.

0~9까지 총 10 종류의 숫자를 가지고 한자리에 0~9 중 하나를 선택해 넣어 숫자를 만듭니다.

너무 쉽죠?



2진법입니다. 중등교과 과정에 나오는 2진법입니다.

10진법이 0~9을 이용한 반면, 2진법은 0과 1을 이용한 숫자 체계입니다.

0과 1로만 모든 숫자를 표현해야합니다.

위 슬라이드에는 표시하지 않았지만, 10진법과 헷갈림을 방지하기 위해 2진법 뒤에는 (2)를 붙여둡시다.

2진법으로 0을 표현하기 위해서는 그냥 0(2)을 쓰면 됩니다.

2진법으로 1을 표현하기 위해서도 그냥 1(2)을 쓰면 됩니다.

2진법으로 2를 표현하고싶지만, 2진법에서는 0과 1밖에 사용하지 못합니다.

때문에 0(2), 1(2) 이후에 한자리 수를 바로 올려버려서 10(2)라고 표현합니다.

즉, 10진법의 2는 2진법의 10(2)와 같습니다.

3을 표현하고 싶다면 11(2), 4을 표현하고 싶다면 자릿수 올림을 통해 100(2)가 되겠죠? 



8진법입니다. 0~7밖에 사용하지 못하는 8진법입니다.

10진법의 7을 8진법에서도 마찬가지로 7(8)로 표현합니다.

하지만 10진법의 8을 8진법에서는 8을 사용할 수 없기 때문에 자릿수를 올립니다.

그렇기에 10진법의 8은 8진법에서 10(8)이 됩니다.

9를 표현하기 위해서는 11(8)이 되고,

10을 표현하기 위해서는 12(8)이 됩니다.



16진법입니다. 2진법과 달리 10진법보다 큰 수네요.

16 종류의 숫자를 이용해 수를 표현하겠네요.

16 종류의 숫자가 있었나요?

우리는 알파벳 A, B, C, D, E, F를 가져와서 사용합니다.

16진법 A는 10진법 10을 의미합니다.

16진법 F는 10진법 15를 의미합니다.

10진법 16을 표현하기 위해서는 자릿수 올림을 하여 10(16)이 됩니다.



왜, 우리는 2진법과 8진법, 16진법을 배울까요.

컴퓨터는 전기신호로 작동되는 기계입니다.

현재 컴퓨터는 매우 단순한 기계로써 전기신호가 있는가? 없는가? 밖에 구별하지 못합니다.

그것이 0 혹은 1이 됩니다.

즉 컴퓨터는 0과 1밖에 인식하지 못하고, 그것을 통해 모든 계산을 합니다.


우리는 0 혹은 1을 비트라고 합니다.

그리고 그 비트 단위 8개가 모이면 바이트라고 하는 단위가 됩니다.


비트 혹은 바이트로 이루어진 컴퓨터 언어는 인간 세계의 2진법 체계와 매우 비슷합니다. 0과 1로만 이루어진 세상이죠.

따라서 저희는 2진법을 숙지해야 컴퓨터와 조금더 친해질 수 있습니다.

하지만 2진법을 쭉 나열을 하면 너무 길어지고 읽기가 불편해집니다.

2진법 4자리수를 모아서보면 8진법으로 표현이 가능합니다.

또한 2진법 8자리수를 모아서보면 16진법으로 표현이 가능합니다.


이것이 바로 우리가 8진법과 16진법을 배우는 이유입니다.



마지막 실습입니다!

직접 그대로 작성해보시고, 출력해보세요.

변수 선언과 초기화 중, 0x의 의미는 뒤에 나오는 숫자체계가 16진법이라는 의미입니다.

즉 0xD3이란 D3이 16진법을 따른다는 의미입니다.

또한 0으로 시작하는 정수는 뒤에 나오는 숫자체계가 8진법이라는 의미입니다.

즉 032이란 32가 8진법을 따른다는 의미입니다.


printf 함수에서 %d 는 기본적으로 10진법으로 정수를 출력하겠다는 의미가 담겨져있습니다.

따라서 첫번째 printf 함수는 인자값으로 받은 16진법 x를 %d 때문에 스스로 10진법으로 바꾸어 출력합니다.

'Computer Science > C' 카테고리의 다른 글

Chapter 14. 실수 표현법  (0) 2018.04.27
Chapter 13. 정수 표현법  (0) 2018.04.26
Chapter 11. 연산자 우선순위  (0) 2018.04.19
Chapter 10. 연산자 실습  (0) 2018.04.18
Chapter 9. 연산자  (0) 2018.04.13

+ Recent posts