본문 바로가기

Programming/C

[C lang] 4. 상수와 연산자

오늘은 상수와 변수에대해서 배워보겠습니다.

 

1. 상수란 무엇인가? 

 수학 시간에 한번씩 들어봤던 단이죠? 

 이 단어를 컴퓨터식(?)으로 설명드리자면 프로그램 실행중 값이 변경되지 않는 데이터를 말합니다 예를들어 5라는 숫자를 10으로 바꾸는 것처럼요. 5는 끝까지 5죠? 5는 10이 아니잖아요 ㅋ 

 상수를 변수하고 비교해서 설명드리면 , 변수는 값을 집어넣어 값을 변동시킬 수 있는거고 상수는 변하게할 수 없는 겁니다 

 

 2. 상수의 종류 

 상수에서도 크게 2가지로 분류가 가능한데요 

  • 볼릭 상수 
  •  리터럴  상수

심볼릭 상수는 상수를 기호화해서 변수처럼 이름을 지어서 사용하는 거고

리터럴 상수는 문자 그대로에 의미가 있어서 걍 생긴대로 쓰이는 상수에요

 

2-1 리터럴 상수 

 위에서 설명한 대로 문자 그대로에 의미가 있는 , 이런거에는 1 2 3 4 5 a b c d e  이런거가 포함되겠죠? 

구지 이걸 또 분류해보면 정수형 상수 , 실수형 상수 , 문자 상수 , 문자열 상수 로 분류가 가능하겠네요

 

예시 소스는 따로 필요할거 같지 않고 그냥 정의만 쓰고 넘어가겠습니다

 

정수형 상수, 말대로 정수형의 상수이다

실수형 상수 , 말대로 실수형의 상수이다

문자 상수 , 작은따옴표로 묶은 문자 하나를 문자 상수라고 한다

문자열 상수 , 큰따옴표로 묶은 하나 이상의 문자를 문자열 상수라고 한다.

 

2.2 심볼릭 상수   

심볼릭 상수는 상수를 기호화해서 의미 있는 이름으로 지어서 쓰는 상수를 말한다. 

리터럴 상수와 반대되는 개념이라 보면된다. 

 

이러한 심볼릭 상수를 만드는 방법은 두가지이다 

  • 매크로 사용하기
  • const 키워드 이용하기

- 매크로 사용하기

#define 문을 이용해서 정의를 해주면 된다.

 

ex) 

#include < stdio.h>

#define root 5 // 사용법은   #define 매크로이름 값    이렇게 쓰시면 되요

main () {

printf ( "%d" , root ); }

 

- const 키워드 사용하기

사용법은 변수를 선언할 때 자료형 앞에다가 const 를 써주면 된다

ex )  const double PI = 3.141592; 이렇게 해주면 됩니다

 

여기서 사용시 주의점을 노트하자면

1. 선언과 동시에 값을 넣어줘서 초기화를 해줘야해요. ( 초기화란 우리가 평소 알고있는 깨끗히 지우다란 의미가 아니라 지우고 어떤 값을 넣어 지운다라 보면 된다. 비슷하게는 덮어쓰기?  )

 

이 상수의 특징은 한번 값을 넣으면 다시는 그 값을 바꾸지 못하는게 특징이에요

 

이렇게 상수에 대한 설명이 모두 끝났습니다 ㅋ

 

3. 연산자란 무엇일까?

말대로 값들의 연산을 도와주는 ㅋ 우리가 왜 이러한 연산자들을 사용하냐면 .... 편리하거든요 ㅋ ㅋ  ㅋ 그래서 사용해요

 

연산자에는 여러가지 종류의 연산자 종류가 있는데요

 

3-1.연산자의 종류

 

대입연산자 =

산술연산자 +, -, *, /, %

증감연산자 ++, --

관계연산자 >, < ,==, != , >= , <=

논리연산자 && , || , !

조건연산자 ?  :

비트 논리연산자 &,|,^,~

비트 이동연산자 >>,<<

복합 대입연산자 +=, -= , *= , /= , %=

 

이렇게 있어요 ㅋ 많죠?ㅋㅋㅋ  순서대로 설명하겠소이다

 

-대입연산자

= 은 전 강의 , 전전강의에서도 많이 봤죠?

뜻은 모두가 알듯이 모두 같다........ 일거같나요? 이렇게 이해하시면 곤란합니다 ㅋ 컴퓨터 세계?에서는 = 은 값을 대입한다라 봐야 해요

예를들어

int i;

i=5; 

이렇게요 i는 5가 아니라 i에 5를 대입한겁니다

 

-산술연산자

더하기 빼기 곱하기 나누기 나머지구하기 다 아시죠?

예제 하나 들고 넘어갑니다

int a = 5;

int b = 5;

int c;

 

c = a / b;      이렇게 사용이 가능합니다. 값이 있는 변수끼리 사칙연산가능 숫자끼리도 가능 !

 

-증감연산자

말대로 증감 , 증가하고 감소시키는 연산자 입니다

여기서 각각 2가지 더 분류가 됩니다 ( 위치에 따라서 )

예를들어 int a = 5; 란게 있다 합시다

만약 ++a 라 쓰면 몇이 출력될거 같나요? 답은 6입니다. 그럼 a++ 같은 경우는요? 답은 6입니다. 근데 뭐가 다르냐고요?

위치하고 의미가 다릅니다

일단 위치차이로는 앞뒤차이가 있죠? 의미는 달라요ㅋ

 

a++ : 먼저 a를 연산하고 1을 증가시킨다

++a : 먼저 1을 증가시키고 a를 연산한다

--a : 먼저 1을 감소시키고 a를 연산한다

a-- : 먼저 a를 연산하고 1을 감소시킨다

 

다음과 같은 예제에서 차이를 느끼실 수 있을 겝니다 

 

int number, numberr = 5;

int n,m;

 

n = number++; // number을 먼저 n에 대입후 number 1증가. 즉 n은 5 number은6

m = --numberr; // number을 먼저 1감소시키고 m에 대입, 즉 m은 4 numberr은 4  

 

-관계연산자

말대로 관계를 알려줍니다 크고 작고 크면서같고 작으면서같다 그리고 새로 보는 != 는 같지않다 의 뜻을 가집니다.

== 이거는 값을 비교하는 겁니다

그리고 이거의 결과를 저장해서 출력해 보면 결과가 0 1 밖에 나오지 않을 겁니다

이유는 결과가 참 거짓으로 나타나기 때문입니다 . 1이면 참 0이면 거짓

 

ex)

int num1=5;

int num2=14;

int result;

 

result = num1 > num2;

 

printf ( "%d" , result );       // 저 식은 거짓이니 0이 출력이 된다

 

-논리 연산자 

 && 는 AND 연산을 ||는 OR 연산을 ! 는 논리부정을

 

AND 연산은 값이 모두 참을 떄만 참이다

OR 연산은 적어도 하나 이상이 참이면 참이다.

NOT 연산은 연산결과가 참이면 거짓이고 거짓이면 참이다. 한마디로 반대 ㅋ

 

ex) int num1 = 2; int num2 = 3; int num3 = 4;

int result;

 

result = ( num1>num2) && ( num2<num3);

//첫번째는 거짓이니 0 두번짼 참이니 1 근데 AND연산은 모두 참이여야 참이니 결론은 거짓

 

이렇게 사용해주면 된다

 

-조건 연산자

걍 예시 보시면서 이해하시면 될깁니다 ㅋㅋ

 

int num1 = 5; int num2 = 10;

int result;

 

result = ( num1 > num2 ) ? num1 : num2; //해석하면 괄호 안 식이 참이면 뒤에거를 결과에 거짓이면 앞에걸 결과에 저장

 

-비트 연산자

먼저 비트의 의미는 2진수를 하나 저장할 수 있는 최소 메모리 공간입니다.

 

& 는 AND 연산 | 는 OR 연산 ~ 는 NOT 연산 ^는 XOR 연산 <<숫자 는 왼쪽으로 숫자만큼 이동 >>숫자 는 오른쪽으로 숫자만큼 이동이 되겠다

 

새로보는 XOR 하고 << >> 만 설명하겠다

XOR 연산은 참 과 거짓 이렇게 있을때 참이다 참참 이나 거짓거짓 일땐 거짓이다.

 

<< >> 뜻은 시프트 라는 거다 . 먼저 2진수를 생각해보세요 그다음 그 수를 옆으로 옮겨보세요

0001000(2) 라는 이진수가 있습니다 . 한번 왼쪽으로 한칸 옮겨보자 그럼

0010000(2) 가 되겠죠? 왼쪽으로 한칸씩 옮겼으니까요 그럼 값은 결론적으로 2배 커졌겠네요 반대로 오른쪽으로 가면 2배가 줄겠네요

이런식이에요 ㅋ

 

-복합 대입 연산자

+= ,-= , *= ... 이렇게 있는데요 산술 연산자 뒤에 = 만 붙여놓은거죠?

 

이건 이걸 줄인어에요 ㅋ 귀찮아서 ㅋ

 

int a,b;

 

a = a + b;   a += b  // a하고 b 더한걸 a에 저장한다

 

다른것도 다 똑같은 방식이에요 ㅋ [는 귀찮아서 ㅋ]

 

3-2 연산자 우선순위

아.. 저것도 외우기 힘든데 이젠 순서까지 외우라네요 ㅋㅋ

그리 중요치 않다 보는데..ㅋㅋ

 

그래도 쓰기 귀찮으니 링크는 걸어드릴꼐요 ㅋㅋㅋ

 

 

 

 

오늘은 상수와 연산자에 대해서 배워보았습니다.

 

다음시간엔 자료형에 대해 좀 더 깊게 공부해보고

 

드디어 뭔가 C언어를 해본다는 느낌이 들게 반복문을 쬐금 맛보기만 하겠습니다

 

그럼 이번 수업은 여기서 마치겠습니다

 

'Programming > C' 카테고리의 다른 글

[C Lang] Data Structure + Algorithm in C language  (0) 2016.08.19
[C lang] 콘솔창 바로 안 꺼지게 하기  (4) 2014.04.26
[C lang] 3. 변수?!  (0) 2014.04.26
[C lang] 2. printf(), scanf()  (0) 2014.04.26
[C lang] 1. 컴파일러 설치하기  (0) 2014.04.26