안녕하세요, 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 프로그래밍 언어 열네번째 강의입니다.

오늘도 변수, 그 중 실수형 변수를 컴퓨터가 어떻게 저장하는지에 대해 알아보겠습니다.



실수의 정의는 유리수와 무리수를 합친 숫자의 범위를 말합니다.

쉽게 설명하여, 정수를 포함하여 소수점을 가지는 숫자들을 생각하시면 됩니다.

본래 실수는 무한대의 소수점을 가질 수 있습니다.

하지만 컴퓨터가 저장할 수 있는 용량의 한계가 있기 때문에 무한대의 소수점은 생략하겠습니다.



우리는 여태까지 변수를 선언하기 위해서 int를 사용하였습니다.

하지만 int는 지난 강의에서 배웠듯이 정수형 변수를 선언하기 위한 자료형입니다.

하지만 실수형 변수를 선언하기 위해서는 float 혹은 double이라는 자료형을 사용해야합니다.

float와 double이라는 단어는 아래 슬라이드에서 설명드리겠습니다.


float형 변수는 총 32비트의 저장 공간을 가집니다.

double형 변수는 그 2배인 64비트의 저장 공간을 가집니다.

float형보다 double형이 더 많은 범위의 숫자를 표현할 수 있겠죠?



바로, 컴퓨터가 실수를 어떻게 저장하고 있는지 알아보겠습니다.

대부분의 컴퓨터에서는 실수를 효율적으로 저장하기 위해서 부동 소수점이라는 방식을 사용합니다.

부동 소수점은 영어로 floating point이기 때문에 우리는 float라는 이름으로 변수를 선언한겁니다.

부동 소수점 방식은 많은 과학분야에서 사용되며 적은 숫자를 이용해 넓은 범위의 실수를 표현할 수 있습니다.


32비트 중 가장 왼쪽의 비트는 부호를 의미하며, 다음 8비트는 e, 나머지 23비트는 f를 의미합니다.

이 세가지 숫자를 조합하여 매우 넓은 범위의 실수를 표현할 수 있습니다. 



하지만 부호 비트와 f, e를 이용해서 숫자 0을 표현할 수 있을까요?

소수점 부분을 표현하는 f를 이용해서는 0을 만들 수 없습니다.

2의 몇 승을 하던 후자도 절대 0을 만들 수 없습니다.

위의 부동 소수점 방식을 이용해서는 0을 표현할 수 없습니다.


그렇다면 우리는 컴퓨터에서 0을 사용할 수 없을까요?

자주 사용하게 되는 0을 위해 컴퓨터는 모든 비트를 0으로 만든다면 이것을 숫자 0으로 하기로 약속을 하였습니다.

이 숫자는 0이 아니지만 컴퓨터는 0을 표현하기 위해 예외로 처리하였습니다.


이때 문제점은 사칙 연산을 통해 결괏값이 0이 나와야한다면?


애초에 실수 타입을 0으로 초기화한다면 컴퓨터는 모든 비트를 0으로 만들어 0을 표시할 겁니다.

하지만 0이 아닌 두 개의 실수가 있고, 그것을 수식을 통해 연산할 때 문제가 됩니다.

컴퓨터는 두 실수를 정해진 비트와 연산 약속에 따라서만 판단하고 계산합니다.

히지만 그 결괏값이 0인 경우 어떻게 될까요?

컴퓨터는 이 결괏값이 실제로 0인지, 그냥 그에 가까운 숫자인지 판단하지 못하고, 그에 가까운 결괏값을 표현합니다.


하지만 0과 그에 가까운 숫자의 차이가 크지 않음으로 대부분 사용자는 무시하고 넘어가게 되지만, 그것이 오래 쌓이다보면 큰 문제가 되기도 합니다.


이번 시간은 이러한 부동 소수점의 문제점만 인지하고 넘어가시고 혹 나중에 문제가 된다면 다시금 복기하겠습니다.



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

Chapter 15. 비트 연산자  (0) 2018.05.01
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 프로그래밍 언어 열세번째 강의입니다.

오늘은 변수, 특히 정수형 변수를 컴퓨터가 어떻게 저장하는지에 대해 알아보겠습니다.



정수를 정의한다면, 자연수 전체와, 그 역원과 0을 말합니다.

아주 간단히 말해, 소숫점이 없는 숫자라 생각하시면 편합니다.

1, 2, 3, ..., 6512, ..., 등 자연수와, 0, 그리고 자연수에 음의 부호를 붙힌 숫자들을 생각하세요.



이전 실습 강의에서 우리는 정수를 컴퓨터에 저장하고 사용하기 위해서 변수의 선언 및 초기화를 하였습니다.

그때 사용하였던 변수 종류는 int였습니다.

int는 Integer의 약자이며, 정수를 뜻합니다.

정수를 저장하고 사용하기 위한 변수 종류입니다.

보통 int만 사용하거나 (signed) int를 작성한다면 양수, 음수를 모두 사용할 수 있습니다.

또한 이 변수 종류는 32비트(bit)의 저장공간을 사용합니다.

바이트(byte)와 비트(bit)에 대해서는 바로 전 강의에서 설명했습니다.



실제로 컴퓨터에 정수형 변수가 저장되는 방식입니다.

지난 시간에 설명했듯이 컴퓨터는 0과 1을 이용한 2진법을 사용합니다.

32비트란 0 혹은 1을 저장할 공간이 32개 있다는 뜻입니다.

1비트씩 32개로 이루어진 정수형 변수 저장공간에서 가장 왼쪽의 비트 하나는 부호를 의미합니다.

가장 왼쪽의 비트가 0이라면 양수, 1이라면 음수를 뜻합니다.

그리고 나머지 31비트는 정수의 크기를 뜻합니다.



32비트는 눈으로 살펴보기에 너무 길기 때문에 간단한 원리를 확인하기 위해 8비트로 대체해보았습니다.

가장 왼쪽의 비트는 0이며, 정수의 크기에는 101이 들어있는 상단의 정수는 +5를 뜻합니다.

2진법 101(2)은 5이기 때문이죠.

가장 왼쪽의 비트는 0이며, 정수의 크기에 111이 들어있는 하단의 정수는 +7를 뜻합니다.

2진법 111(2)은 7이기 때문이죠.


그렇다면 음수는 어떻게 표현할까요?



간단하게 생각하면, 가장 왼쪽의 비트가 정수의 부호를 나타내는 비트라고 언급했습니다.

따라서 -5를 표현하고 싶다면 가장 왼쪽 비트에 음수를 표시하고, 정수의 크기에 5를 넣으면 될까요?



검증하기에 앞서, 5-5=를 해보겠습니다. 5-5=는 5+(-5)=와 같습니다.

5와 -5를 이전 슬라이드에서 계산했듯이 비트로 만들어 덧셈을 해보겠습니다.

윗 슬라이드에서 정한 규칙대로 음수를 정하니, 계산의 결과가 -10이 나왔군요.

5+(-5)=0이 나와야하는데, 잘못된 계산 결과입니다.


컴퓨터는 기본적을으로 덧셈과 2진법밖에 할 줄 아는것이 없습니다.

(뺼셈은 음수로 만들어 더하고, 곱셈도 덧셈을 매우 빠르게 여러번 할뿐이죠.)



컴퓨터는 덧셈 밖에 할 수 없으니, 2의 보수법이란 것을 도입합니다.

이게 왜 음수지? 라는 생각보다는 음수를 표현하는 또 한가지의 규칙이라고 생각하시면 이해가 쉽습니다.


양수를 음수로 만드는 방법 중 하나로, 가장 먼저 모든 0을 1로 바꾸고 모든 1을 0으로 바꿉니다.

그리고 +1을 해줍니다. 그러면 2의 보수법을 이용한 음수로 만들기가 끝났습니다.


우리는 이러한 값을 음수라 말합니다. 같은 방법을 다시 반복하면 다시 양수가 되겠죠.



새로운 음수 규칙으로 만들어진 -5로 5+(-5)을 진행해볼까요.

와, 실제로 결과값이 0이 나왔습니다.


이렇게 컴퓨터는 음수를 저장할 땐, 2의 보수법을 이용하여 음수를 표현합니다.


다음 시간에는 실수를 컴퓨터는 어떻게 표현하는지에 대해 공부하겠습니다.


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

Chapter 15. 비트 연산자  (0) 2018.05.01
Chapter 14. 실수 표현법  (0) 2018.04.27
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


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

오늘은 구체적으로 연산자의 우선순위에 대해 학습하겠습니다.



지난 시간은 연산자 하나씩 이용하여 수식을 만들었습니다. 하지만 모든 계산이 그렇게 간단하게 표현이 되지 않습니다.

예를 들어 5+4*2를 계산해볼까요?

쉽죠?

답은 18일까요, 13일까요.

물론 사칙연산 중 곱셈을 먼저 해야한다는 규칙이 있고, 그 규칙에 따라 4*2를 하고나서 덧셈을 하기 때문에 답은 13입니다.

그 다음은 (5+4)*2를 계산해볼까요?

답은 13일까요, 18일까요.

덧셈보다 곱셈을 먼저 계산해야한다는 규칙보다 더 우선적으로 적용되는 괄호 안의 수식부터 계산하라는 규칙이 있었죠.

그 규칙에 따라 괄호 안의 수식인 5+4를 먼저 계산하고 곱셈을 하기 때문에 답은 18입니다.


이와같이 컴퓨터 프로그래밍에도 수식 계산 규칙이 있답니다.

여러가지 연산자가 있을때 무엇을 먼저 계산하는가는 매우 중요한 문제입니다.

잘 숙달하시길 바랍니다.



가장 우선적으로 계산해야하는 연산자들입니다.

우리가 흔히 알고있는 계산처럼 괄호는 최우선적으로 계산합니다.

그리고 후위 증감 연산자도 최우선순위에 있습니다.



1순위 연산자가 계산을 끝나면 2순위 연산자가 계산이 됩니다.

전위 증감 연산자가 있습니다.

여기서 +, -는 덧셈, 뺄셈이 아닌 숫자의 양수, 음수를 나타내는 부호입니다.

또한 *도 곱셈 표시가 아닌 다른 용도의 연산자입니다.

헷갈리시면 안됩니다.



형식 캐스팅 연산자는 추후에 배우도록 하겠습니다.



드디어, 우리가 잘 알고 있는 사칙연산 중 곱셈, 나눗셈, 나머지 연산자입니다.

이들은 4순위이며, 1,2,3순위의 연산자가 끝나야 계산이 됩니다.



곱셈, 나눗셈, 나머지 연산자가 끝나야 덧셈, 뺄셈이 진행됩니다.



6순위는 비트 연산자이며, 추후에 학습하겠습니다.



7순위는 비교 연산자입니다.

비교 연산자는 참(1) 혹은 거짓(0)을 결과값으로 내보낸다는 걸 기억하시지요?

반드시 중요한 부분이기에 지난 강의를 참조하시길 바랍니다.



8순위도 비교 연산자입니다.



9순위는 비트 연산자입니다.



10순위는 비트 연산자입니다.



11순위는 비트 연산자입니다.



12순위는 논리 연산자입니다.

논리 연산자는 양 쪽의 변수를 참(0이외 값)과 거짓(0)으로 생각합니다.

그리고 결과값 또한 참(1)과 거짓(0)으로 내보냅니다.

기억하시나요? 지난 강의를 참조하시길 바랍니다.



13순위도 논리 연산자입니다.



14순위는 조건 연산자이며, 추후에 다루도록 하겠습니다.



15순위는 대입(할당) 연산자와 복합 할당 연산자입니다.

거의 마지막에 이루어지는 연산자입니다.



진짜 마지막 순위 16순위의 연산자는 쉼표 연산자입니다.



모든 연산자의 우선 순위를 살펴보았습니다.

앞으로 어떠한 예제의 수식을 보았을때에 연산자의 우선순위를 꼭 짚고 넘어가야합니다.

연산자의 우선순위를 잘못 이용하여 완전히 다른 결과값을 내보낼 수 있습니다.


그럼 마지막으로 예제를 한번 보겠습니다.

첫번째 수식, x=4-2*2&&6*4입니다.

어떠한 연산자들이 있나요?

천천히 앞에서부터 나열하면, =(대입 연산자), -(뺄셈), *(곱셈), &&(논리적 AND 연산자), *(곱셈)이 있습니다.

우선순위 확인해보겠습니다.

제일 먼저 해야하는 것은 곱셈입니다.

따라서 2*2와 6*4가 먼저 진행됩니다.

x=4-4&&24가 됩니다. 그리고 뺄셈이 다음 우선순위를 가집니다.

따라서 x=0&&24가 됩니다. 그리고 대입 연산자보다 논리적 AND 연산자가 우선순위를 가집니다.

따라서 0&&24가 진행되고, 이 결과값은 0(거짓)과 24(참)의 논리적 AND 연산자이기 때문에 결과값은 0(거짓)을 반환합니다.

따라서 x=0이 됩니다. 그리고 마지막으로 남은 대입 연산자가 변수 x에 0을 대입함으로써 수식이 끝납니다.


쉽죠?

두번째 수식과 세번째 수식은 괄호가 있습니다. 직접 풀어보실까요?



연산자의 우선순위를 가장 쉽게 이용하는 방법으로는 괄호를 잘 이용하시면 원하시는 방향으로 수식을 작성할 수 있습니다.

다음 강의에서 뵙겠습니다.



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

Chapter 13. 정수 표현법  (0) 2018.04.26
Chapter 12. 진법  (0) 2018.04.24
Chapter 10. 연산자 실습  (0) 2018.04.18
Chapter 9. 연산자  (0) 2018.04.13
Chapter 8. 변수의 자료형  (0) 2018.04.12


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

오늘은 Chapter 9에서 배운 연산자를 실습하겠습니다.

이번 시간만큼은 직접 코드를 작성하고, 컴파일 해보시길 바랍니다. 반드시!



일단 위의 코드를 그대로 본인의 비주얼 스튜디오에 작성해보세요.

작성이 완료되셨나요? 이제 한 줄 한 줄 해석해보겠습니다.


가장 먼저 Chapter 7에서 배운 변수 선언을 대입 연산자를 이용해 변수 초기화와 동시에 했습니다.

변수 x에는 7이 대입되었고, 변수 y에는 4가 대입되었습니다.


그리고 Chapter 6에서 배운 printf 함수입니다. 잠깐 복습 겸 우리가 작성한 첫번째 printf 함수를 살펴볼까요.

첫 번째 전달인자는 겹따옴표 ""안의 내용입니다. 이 전달인자는 실제 화면에 출력하고자 하는 내용입니다.

그 중 %d은 서식 지정자이며, ""안에서 첫번째로 나타난 서식 지정자 %d는 printf 함수의 두 번째 전달인자를 해당 위치에 출력하겠다는 의미입니다.

그리고 ""안에서 두번째로 나타난 서식 지정자 %d는 printf 함수의 세 번째 전달인자를 해당 위치에 출력하겠다는 의미입니다.

마찬가지로 ""안에서 마지막으로 나타난 서식 지정자 %d는 printf 함수의 네 번째 전달인자를 해당 위치에 출력하겠다는 의미입니다.

그리고 ""안에서 /n은 줄바꿈을 의미합니다. 이에 대해서는 추후에 다시 언급하겠습니다.

지금은 ""안에 \n을 넣는다면 줄바꿈이 된다고 이해하시면 충분합니다.


일단 슬라이드의 코드를 직접 작성하고 컴파일 (ctrl+F5)를 해볼까요.



컴파일 결과가 출력되었습니다.

첫번째 printf 함수는 덧셈 연산자입니다. 마지막 전달인자에서 x+y가 계산이 되고, 세번째 서식 지정자 위치에서 해당 값이 출력이 되었습니다.

7+4=11이 정상적으로 출력되었습니다.

뺄셈, 곱셈 연산자도 정상적으로 출력되었습니다.

하지만 네번째 printf 함수에서는 무엇이 출력이 되었나요?

실제 7/4는 1.75입니다. 하지만 모종의 이유로 소수점 이하는 생략된채 1만 출력이 되었습니다.

이는 변수의 자료형, 서식 지정자와 연관이 있으며, 조만간 설명해드리겠습니다.

마지막 연산자는 나머지 연산자입니다.

나머지 연산자는 말 그대로 나눗셈을 하고 나머지를 계산하여 출력합니다.

7/4를 계산하였을 때, 7=4*1+3, 즉 몫은 1이며 나머지는 3으로 계산할 수 있습니다.

따라서 3을 정상 출력하였습니다.


이때, 코드를 다시한번 보실까요? 마지막 printf 함수에 "%d%%%d=%d\n"라고 작성하였습니다.

%가 과도하게 많죠? printf 함수의 ""안에서 %를 마주치면 뭔가 특별한 것이 있을 것이라고 컴파일러는 판단합니다.

이로인해 %d가 문자 그대로의 %d가 아닌 서식 지정자로 인식이 됩니다.

하지만 문자 그대로의 %를 입력하고 싶다면, %%을 작성하시면 실제 출력화면에서는 %만 출력됩니다.

이러한 과정도 추후에 다시 설명하겠습니다. 지금은 연산자 실습시간이죠.



일단 위의 코드를 그대로 본인의 비주얼 스튜디오에 작성해보세요.

작성이 완료되셨나요? 이제 한 줄 한 줄 해석해보겠습니다.



후위 증감 연산자와 전위 증감 연산자는 주의깊게 사용해야합니다.


후위 증가 연산자의 경우, 모든 계산이 끝나고 다음 줄로 넘어갈 때 계산이 이루어집니다.

예를 들어, 현재 x=7이라고 변수 선언과 동시에 초기화를 하였습니다.

이를 후위 증가 연산자를 이용해, printf("%d\n", x++);라고 작성하였습니다.

이 때, x는 증가하지 않은채 수식이 진행됩니다. x는 그대로 숫자 7인 채로 진행됩니다.

따라서 printf 함수가 끝날 때까지도 x는 7이며 실제 컴파일 화면에서도 7을 출력합니다.

하지만 printf 함수가 끝나고 다음 줄로 넘어갈때 후위 증가 연산자는 작동합니다.

이 순간에 후위 증가 연산자가 x를 1 증가시켜 x=7+1=8로 만듭니다.

그렇기때문에 두번째 printf("%d\n", x)에서 x는 8이 되어 있었고, 실제 컴파일 화면에서도 8이 출력됩니다.


하지만 전위 증가 연산자의 경우는 다릅니다.

전위 증가 연산자의 경우 후위 증가 연산자와 달리 가장 우선적으로 변수를 1 증가시킵니다.

따라서 세번째 printf 함수에서 x는 8이였지만, 전위 증가 연산자로 인하여 곧바로 x=8+1=9가 되었고, 컴파일 화면에서 9가 출력됩니다.

그리고 이미 연산이 끝났기 때문에 세번째 printf 함수가 끝나도 변수 x는 변동이 없습니다.


이와 마찬가지로 후위, 전위 감소 연산자도 진행됩니다.

작성한 코드와 컴파일 화면을 잘 비교하며 공부해보세요.




비교 연산자 부분입니다. 

일단 위의 코드를 그대로 본인의 비주얼 스튜디오에 작성해보세요.

작성이 완료되셨나요? 이제 한 줄 한 줄 해석해보겠습니다.



지난 시간에도 말씀드렸이 비교 연산자의 결과값은 참(1) 혹은 거짓(0)입니다.

x=7이고 y=4입니다.

첫번째 수식 7==4(7과 4는 같다)라는 수식은 거짓입니다. 따라서 거짓(0)을 반환하고 실제 컴파일 화면도 0을 출력합니다.

두번째 수식 7!=4(7과 4는 다르다)라는 수식은 참입니다. 따라서 참(1)을 반환합니다.

세번째 수식 7>4(7은 4보다 크다)라는 수식은 참입니다. 따라서 참(1)을 반환합니다.

네번째 수식 7<4(7은 4보다 작다)라는 수식은 거짓입니다. 따라서 거짓(0)을 반환합니다.



논리 연산자 부분입니다. 

일단 위의 코드를 그대로 본인의 비주얼 스튜디오에 작성해보세요.

작성이 완료되셨나요? 이제 한 줄 한 줄 해석해보겠습니다.



x = 1, 즉 논리 연산자 입장에서는 참을 뜻합니다.

y = 0, 즉 논리 연산자 입장에서는 거짓을 뜻합니다.

첫번째 수식 !x(x의 반대)는 참의 반대인 거짓(0)입니다.

두번째 수식 x&&y(x와 y 모두 참이다)는 y가 거짓이기 때문에, 거짓(0)입니다.

세번째 수식 x||y(x 혹은 y 중 최소 하나는 참이다)는 x가 참이기 때문에, 참(1)입니다. 



복합 할당 연산자 부분입니다. 

일단 위의 코드를 그대로 본인의 비주얼 스튜디오에 작성해보세요.

작성이 완료되셨나요? 이제 한 줄 한 줄 해석해보겠습니다.



복합 할당 연산자는 대입 연산자와 다른 연산자가 합쳐진 연산자입니다.

지난  시간에 설명했듯이 연산과 동시에 대입을 합니다.

첫번째 printf 함수를 보면 가장 초기 x값을 출력합니다. 숫자 7입니다.

덧셈 할당 연산자를 실행합니다.

x += y를 풀어 설명하자면, x와 y를 더하고, 그 결과값을 다시 x에 대입한다는 말과 같습니다.

따라서 x는 7이고 y는 4이기때문에 7+4=11이 다시 x에 대입되어 x=11이 됩니다.

그렇기에 두번째 printf 함수의 변수 x 출력값이 11이 됩니다.


마찬가지로 x -= y를 풀어 설명하자면, x와 y를 빼고, 그 결과값을 다시 x에 대입한다는 말과 같습니다.

따라서 x는 현재 11이고 y는 4이기때문에 11-4=7이 다시 x에 대입되어 x=7이 됩니다.

그렇기에 세번째 printf 함수의 변수 x 출력값이 7이 됩니다.



다시 x *= y를 풀어 설명하자면, x와 y를 곱하고, 그 결과값을 다시 x에 대입한다는 말과 같습니다.

따라서 x는 현재 7이고 y는 4이기때문에 7*4=28이 다시 x에 대입되어 x=28이 됩니다.

그렇기에 세번째 printf 함수의 변수 x 출력값이 28이 됩니다.


이런 식으로 /=와 %= 를 유추할 수 있습니다.


오늘 실습은 여기까지 마무리 짓겠습니다.
반드시 직접 손으로 코드를 작성해보고 컴파일 해보시는 시간을 가지시길 바랍니다.


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

Chapter 12. 진법  (0) 2018.04.24
Chapter 11. 연산자 우선순위  (0) 2018.04.19
Chapter 9. 연산자  (0) 2018.04.13
Chapter 8. 변수의 자료형  (0) 2018.04.12
Chapter 7. 변수의 선언  (0) 2018.04.12


안녕하세요, C 프로그래밍 언어 아홉번재 강의입니다.

오늘은 연산자에 대해 간단히 알아보겠습니다.

지난 시간은 변수의 선언에 대해 알아봤습니다.

그 과정에서 대입 연산자라는 것이 쓰였는데, 그 자세한 내용입니다.



연산자는 크게 '산술 연산자', '비교 연산자', '논리 연산자', '비트 연산자', '복합 할당 연산자', '멤버와 포인터 연산자', 그리고 기타로 나눌수 있습니다.

여기서 멤버와 포인터 연산자는 추후 포인터 강의때 설명하도록 하겠습니다.

마찬가지로 아직은 쓰일 일이 없는 비트 연산자도 추후에 다루도록 하겠습니다.



산술 연산자는 매우 기초적인 계산을 담당하고 있습니다.

지난 시간에도 배웠던 대입 연산자란 b를 a에 대입(치환)한다는 의미입니다.

덧셈 연산자란 a와 b를 더하는 연산자,

뺄셈 연산자란 a에서 b를 빼는 연산자,

곱셈 연산자란 a와 b를 곱하는 연산자입니다.



나눗셈 연산자란 a를 b로 나누는 연산자,

나머지 연산자란 a를 b로 나누고 그 나머지 값을 구하는 연산자입니다.


그리고 가장 중요한 증가 연산자와 감소 연산자가 있습니다.

증가 연산자는 다시 두가지로 나뉘는데, 전위 증가 연산자후위 증가 연산자가 있습니다.

두 연산자 모두 a에 더하기 1을 하겠다는 의미이지만,

앞에 위치한 전위 증가 연산자는 다른 수식과 함께 쓰일 경우 가장 우선순위로 a에 1을 더합니다.

하지만 뒤에 위치한 후위 증가 연산자는 다른 수식과 함께 쓰일 경우 모든 연산자가 끝나고 마지막에 a에 1을 더합니다.


감소 연산자 또한 증가 연산자와 마찬가지로 전위와 후위로 나뉘며, 용도는 같습니다.


전위와 후위에 대해 헷갈리시나요? 다음 강의에서 실습을 통해 다시 알아보겠습니다.



비교 연산자는 수식의 조건이 만족하면 숫자 1을 반환합니다.

만약 수식의 조건이 만족되지 않으면 숫자 0을 반환합니다.

같음 비교 연산자를 이용하여 예를 들어보겠습니다.

컴퓨터는 5==6 이라는 수식을 만나게 된다면 ==을 기준으로 양쪽의 두 식을 비교하는 비교 연산자임을 알게 됩니다.

실제로 두 식을 비교하여 ==이 맞는지 틀린지 확인을 합니다.

위 예제 5==6는 당연히 틀린 수식임으로 컴퓨터는 숫자 0을 반환합니다.

반대로 6==4+2와 같이 수식이 맞다면 컴퓨터는 숫자 1을 반환합니다.

같지 않음 비교 연산자를 살펴보겠습니다.

5!=4는 무엇을 반환할까요?

한국어로 천천히 해석해본다면, '5와 4는 같지 않다'라는 말과 같습니다. 즉 올바른 수식이며 숫자 1을 반환합니다.



비교 연산자는 어렵지 않겠습니다.

수식이 만족하면 숫자 1을 반환하고, 수식이 만족하지 않으면 숫자 0을 반환한다는 점을 유의해주세요.



비교 연산자와 비슷한 논리 연산자입니다.

논리 연산자를 설명하기 이전에 프로그래밍의 참(True)와 거짓(False)에 대해 설명하겠습니다.

앞서 배운 비교 연산자를 생각해볼까요.

5==3은 참일까요 거짓일까요?

네, 이 수식은 거짓(False)입니다. 그렇다면 컴퓨터는 어떤 값을 반환했을까요?

위에서 설명해드렸듯이 컴퓨터는 0을 반환합니다.

프로그래밍에서 거짓(False)은 숫자 0으로 표현을 합니다.

그렇다면 참(True)은 숫자 1로 표현하는 것일까요?

절반은 맞고 절반은 틀립니다.

프로그래밍에서 참(True), 거짓(False)을 이야기할 때, 숫자 0은 거짓을 뜻합니다.

그리고 그 나머지 모든 숫자는 참을 뜻합니다. 그 중 가장 대표적인 숫자가 1입니다.


이해 가셨나요?


그럼 논리 연산자로 돌아오겠습니다.

논리 연산자는 숫자를 참과 거짓 정보로 생각하셔야합니다.

논리적 NOT 연산자는 a가 거짓일 경우, 참을 반환합니다.

만약 a가 참일 경우, 거짓을 반환합니다.


논리적 AND 연산자는 a와 b가 모두 참이여야만, 참을 반환합니다.

그 외의 모든 경우는 거짓을 반환합니다.


논리적 OR 연산자는 a와 b 중 하나만 참이여도, 참을 반환합니다.

하지만 그 외의 모든 경우는 거짓을 반환합니다. 




비트 연산자에 대해서는 추후에 다루도록 하겠습니다.



비트 연산자에 대해서는 추후에 다루도록 하겠습니다.



복합 할당 연산자는 대입연산자와 나머지 연산자들이 합쳐진 연산자입니다.

쉽게 생각하여 연산과 동시에 대입을 할 수 있습니다.

덧셈 할당 연산자는 a에 b를 더한 값, a+b를 즉시 a에 대입하겠다는 표현입니다.

뺄셈 할당 연산자는 a에서 b를 뺀 값, a-b를 즉시 a에 대입하겠다는 표현입니다.


나머지도 같은 방식으로 진행됩니다.



나머지도 같은 방식으로 진행됩니다.


좀더 구체적인 설명과 예시는 바로 다음시간에 이어서 하겠습니다.





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

Chapter 11. 연산자 우선순위  (0) 2018.04.19
Chapter 10. 연산자 실습  (0) 2018.04.18
Chapter 8. 변수의 자료형  (0) 2018.04.12
Chapter 7. 변수의 선언  (0) 2018.04.12
Chapter 6_1. 과제  (0) 2018.04.05


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

오늘은 지난 시간에 소개하다가 넘어간 자료형에 대해 아주 짤막한 소개를 하겠습니다.

자료형(Data Type) 이야기만 두 장의 챕터가 필요하기 때문에 추후에 반드시 설명하겠습니다.



변수를 선언하기 위한 자료형은 크게 두가지로 나뉩니다.


정수형 변수란 말 그대로 정수(Integer)를 저장 혹은 처리하기 위한 변수입니다.

예를 들어, 숫자 15, 20, -15와 같은 숫자를 처리하기 적합한 변수입니다.


실수형 변수란 실수를 저장 혹은 처리하기 위한 변수입니다.

예를 들어, 숫자 3.131592, -2.44, 912.42와 같은 소수점이하가 존재하는 숫자를 처리하기 적합한 변수입니다.



이러한 정수형, 실수형 변수를 구분해서 선언하기 위해서는 각기 다른 자료형을 이용해야합니다.


정수형 변수를 선언하기 위한 자료형은 char, short, int, long과 같은 자료형이 있습니다.

지난 시간에 사용한 자료형은 int 자료형이였습니다.


실수형 변수를 선언하기 위한 자료형은 float, double과 같은 자료형이 있습니다.


각각 상황에 따라 알맞은 자료형을 선택하면 됩니다.

자료형의 차이점에 대해서는 추후에 반드시 설명해야할 때가 있습니다.

그 때 다시 각각의 차이점에 대해서 정확히 설명하고 알맞은 사용시기를 알려드리겠습니다. 



한번 실습 프로그래밍을 해볼까요.

일단 배껴쓰기를 해보세요.

쓰다보면 지난 Chpater 7에서 배운 변수의 선언과 초기화를 복습할 수 있습니다.

Chapter 6에서 배운 printf 함수의 전달인자와 서식 지정자를 한번더 확인할 수 있습니다.

printf 함수는 아직 덜 이해가 가셔도 좋습니다. 어떠한 모양을 하고 있는지 확인해주시길 바랍니다.



'ctrl + F5'를 눌러주시면 위와같이 결과 화면이 뜹니다.

변수의 값을 임의로 바꾸어가며 숙달해보세요.


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

Chapter 10. 연산자 실습  (0) 2018.04.18
Chapter 9. 연산자  (0) 2018.04.13
Chapter 7. 변수의 선언  (0) 2018.04.12
Chapter 6_1. 과제  (0) 2018.04.05
Chapter 6. printf 함수  (0) 2018.04.05


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

오늘은 프로젝트를 생성하고, 소스파일을 만들어 실행해보겠습니다.

아주 간단하고 쉬운 작업이지만, 모든 프로그래밍의 시작입니다.


잘 따라오시길 바랍니다.



Chapter 2에서 설명해드렸듯이 저희는 개발을 보다 쉽게하기 위해서 통합 개발 환경(IDE)를 사용합니다.

해당 강의의 모든 프로그래밍 실습은 비주얼 스튜디오 2017를 통해 이루어집니다.



지난 Chapter 2에서 설치한 비주얼 스튜디오 2017의 화면입니다.




좌측 상단의 '파일' 메뉴를 눌러주세요.



'새로 만들기(N)' 버튼을 눌러주시고, '프로젝트(P)...'를 선택해주세요.



'새 프로젝트'라는 새로운 창이 생겼습니다. 좌측 목록 중에 'Windows 데스크톱'을 선택해주세요.



좌측 목록 'Windows 데스크톱'을 선택해주시면 중앙의 선택지가 변합니다.

'Windows 데스크톱 마법사'를 선택해주세요.



선택을 하셨다면 하단의 '이름(N)'이 Project1으로 바뀜을 알 수 있습니다.



'이름(N)' 부분에 원하시는 프로젝트 명을 입력하세요.

저는 Practice 라고 명했습니다. 그리고 '확인' 버튼을 눌러주세요.



새로운 창이 생겼습니다.

중앙의 '빈 프로젝트(E)' 를 체크 표시해주세요.

글자 앞의 빈 박스를 선택하세요.



위와 같이 선택이 되셨으면 '확인'을 선택하세요.



자, 여기까지 프로젝트를 생성해보았습니다.

이제 소스파일을 생성하겠습니다.

우측 메뉴 중에 '소스 파일'이라는 항목을 오른쪽 클릭해주세요.



'소스 파일' 항목을 오른쪽 클릭하시고 '추가(D)'를 선택하세요.

그리고 '새 항목(W)를 선택하세요.




새로운 창이 생겼습니다.

중앙의 목록에서 'C++ 파일(cpp)'을 선택하세요.

현재 하단의 '이름(N)'은 소스.cpp로 되어있을겁니다. 


**파일명을 반드시 Hello.c 로 바꾸어주세요.**


Chapter 1에서 설명하였던 여러 종류의 프로그래밍 언어를 기억하시나요?

그중 C++이라는 언어가 C와 별개로 존재했습니다.

이 둘은 엄연히 다른 언어임으로 서로 다른 규칙을 가지고 있습니다.

현재 설정은 C++이 기본으로 설정이 되어있기 때문에, 이번 C언어 강의에서는 C언어를 위한 소스파일을 만들어야합니다.

C언어를 위한 소스파일은 '파일명.c'으로 파일 이름 뒤에 점(.)과 c를 반드시 붙여서 생성해야합니다.



**파일명을 반드시 Hello.c 로 바꾸어주세요.**

앞으로 C언어 강의에서의 실습 소스 파일은 동일한 규칙으로 파일 이름 뒤에서 .c를 붙여주세요.



자, 그러면 비주얼 스튜디오의 텍스트 편집기가 생성 되었습니다.



이곳에서 사용자는 직접 언어를 입력하여 프로그래밍을 시작할 수 있습니다.



그러면 프로그램을 작성해볼까요?

하지만 아직 배운것이 없습니다.

프로그래밍을 배울때에 가장 기본은 배껴쓰기입니다.


아직은 많은 각 단어가 무엇을 의미하는 지, 어떤 동작을 하지는 전혀 이해하지 못해도 됩니다.

일단은 따라 써보고 천천히 이해하는 것이 프로그래밍 학습에 가장 큰 지름길입니다.


영어를 전혀 몰라도, PPT의 내용이 무슨 말인지 전혀 몰라도 됩니다.

일단 따라서 써보세요.


(5번째 줄의 '\' 표시는 한글 키보드에서의 '\'입니다.

한글전용 폰트에서는 원화표시(\)가 나오며, 영문전용 폰트에서는 역슬래시(\)가 나옵니다.

둘다 같은 기능을 하기때문에 상관없습니다.)


7줄을 모두 작성하셨으면, 'Ctrl + S'를 눌러 저장해주세요.



이제 프로그램을 실행해 볼까요. 상단의 '디버그(D)'를 선택해서, '디버그하지 않고 시작(H)'를 눌러주세요.

혹은 'Ctrl + F5'를 눌러주세요.



짜잔.

드디어 첫 프로그램을 만드셨습니다.


아직은 화면에 'Hello, C world !' 라는 문장밖에 출력하지 못하였으나, 이것이 모든 프로그래밍의 기초라는 거 알아두세요!

고생하셨습니다.


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

Chapter 5. 주석 달기  (0) 2018.04.05
Chapter 4_1. 과제  (0) 2018.04.05
Chapter 4. Hello, C world ! 살펴보기  (0) 2018.04.03
Chapter 2. IDE 설치하기  (0) 2018.04.01
Chapter 1. C 언어란  (0) 2018.03.31


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

오늘은 프로그래밍을 하기 위한 환경을 만들겠습니다.

앞으로 프로그래밍 실습을 하기위한 필수적인 단계가 되겠습니다.




통합 개발 환경, IDE란 프로그램 개발에 관련된 모든 작업을 단 하나의 프로그램에서 할 수 있는 소프트웨어를 말합니다.

전에는 프로그래밍 언어를 입력하는 프로그램,

그것을 컴파일(Compile)해주는 프로그램,

디버거(debugger)해주는 프로그램 등등 프로그램을 만들기 위해서는 많은 개발 프로그램들이 필요했습니다.


하지만 편의를 위해 이들을 하나로 묶어 제공하는 것을 통합 개발 환경이라고 합니다.



프로그래밍 언어에도 다양한 종류가 존재하듯이 통합 개발 환경, IDE도 많은 종류가 존재합니다.


그 중 C언어를 공부하는 입문자에게 가장 편리하고 무료로 구할 수 있는 통합 개발 환경은 마이크로소프트의 비주얼 스튜디오(Visual Studio)입니다.

마이크로소프트(Microsoft)에서 일반 사용자들에게 무료로 배포하는 비주얼 스튜디오는 윈도우에서 지원하는 거의 모든 프로그램을 만들 수 있습니다.

이 뿐만 아니라, 이미 전세계 많은 사람들이 이 프로그램을 이용하고 있기 때문에 추후에 정보를 얻기도 편합니다.


그렇다면 이젠 비주얼 스튜디오를 설치하겠습니다.



구글 검색창에 'visual studio'를 입력해주시고, https://www.visualstudio.com/ 에 접속해주세요.



PPT와 같은 화면이 나온다면 왼쪽 화면의 'Windows 용 다운로드'를 클릭해주세요.



'Community 2017'를 클릭해주세요.



화면이 전환이 되고, 설치파일을 저장해주세요.



저장된 폴더로 들어가, 설치를 진행해주세요.



설치 준비 중 입니다.



수십 초의 시간이 지나면..



설치 준비가 끝나고 위와 같은 화면이 뜹니다.

저희는 많은 프로그램이 필요하지 않고 C언어를 학습하기 때문에 'Windows 항목' 중 'C++를 사용한 데스크탑 개발' 항목을 선택해주세요.



PPT 그림과 같이 체크표시해주세요.



그리고 오른쪽 아래 '설치'를 누르시면, 설치가 진행됩니다.



설치가 완료되면, 새로운 창이 뜹니다. 마이크로소프트 계정이 있다면 입력해주세요.

마이크로소프트 계정이 없다면 가입 후 입력하여도 좋습니다.

혹시 계정도 없고, 가입하기 싫으신 분들은 '나중에 로그인'을 눌러주세요.


색 테마 선택에서 저는 '어둡게'를 선택하였습니다.

자주 화면을 보아야하는 입장에서 어두운 계열의 테마는 눈을 덜 자극합니다.

테마는 개발에 직접적인 영향을 주지 않으니, 개인의 취향에 따라 선택해주세요.


'Visual Studio 시작'을 눌러주세요.



이제 모두 완료하였습니다.

이대로 개발을 시작하여도 좋지만, 저는 글꼴마저 바꾸겠습니다.



상단의 메뉴 중 '도구'를 누르고, '옵션'을 누릅니다.



새로운 창이 뜹니다.

'글꼴 및 색'을 눌러줍니다.



대표적인 개발자 폰트 중 하나인 'Consolas'를 선택해주시고, '확인'을 눌러줍니다.



자, 이제 모든 설치를 완료하고, 다음 장에서는 본격적으로 개발을 시작하겠습니다.


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

Chapter 5. 주석 달기  (0) 2018.04.05
Chapter 4_1. 과제  (0) 2018.04.05
Chapter 4. Hello, C world ! 살펴보기  (0) 2018.04.03
Chapter 3. 프로젝트 생성하기  (0) 2018.04.02
Chapter 1. C 언어란  (0) 2018.03.31

+ Recent posts