본문 바로가기

프로그래밍언어/C#

Chapter 04 변수 – 정보를 담는 방법

Chapter 04 변수 – 정보를 담는 방법

 

 뇌를 자극하는 C++ 을 참고했습니다.

 

Section 01. C++에서 정보를 다루는 법

◆정보란 무엇인가

C++프로그래밍에 있어서 모든 정보는 근본적으로 숫자이다.

어떠한 정보던지 숫자로 표현할 수 있어서 C++에서 정보를 보관하는

방법이란 숫자를 보관하는 방법을 말한다.

 

◆변수의 정의

변수는 숫자를 보관할 수 있는 공간이나 방을 의미한다.

 

Int : 변수로 숫자를 넣는다.(5장에서 설명)

 

주석 : 슬러쉬 두 개(//)로 시작되는 문장을 주석이라고 부른다.

주석의 용도는 사람이 보기 위한 것이고 컴퓨터는 주석의 첨가 여부에 관여하지 않는다.

주석은 주로 '이 코드가 무슨 일을 하는가?' 보다는 '이 코드가 왜 이 일을 하는가?'를 설명하는

주석이 더 유용하다. 무슨 일을 하는지는 코드를 보면 이해가 가능하지만 왜 이 일을 하는지는

작성자만이 알 수도 있기 때문이다.

 

◆변수의 정의와 사용

 

이 프로그램을 실행하면 a,b,c라는 세 개의 변수가 생기고,

변수는 각각 100,200,300의 값을 갖는다.

 

 

 

위의 프로그램에서는 100200300이 붙어서 출력된다.

알아보기 쉽도록 100과 200, 300사이에 콤마를 두고 싶다면

cout에 밑과 같이 표시해준다.

 

 

 

이 프로그램을 실행시키면 오류가 뜬다.

그 이유는 코드의 위치가 바뀌었기 때문이다.

여기서 C++에서는 변수를 사용하기 전에 컴퓨터가 위에서부터

아래로 읽는다는 것을 알고 넘어가야 한다.

 

 

 

◆변수의 정의, 그 다양한 모습

앞에서는 변수의 정의와 숫자의 대입을 따로 하였다.

하지만 변수를 정의함과 동시에 변수에 초기값을 넣는 것이 가능하다.

 

 

위 프로그램에서 int a = 100, b = 200, c = 300 으로 한 줄에 세 개의 변수를 동시에 정의할 수도 있고 한 줄에 여러 변수의 정의와 어떤 수에는 초기값을 넣어주고 어떠한 것에는 넣지 않아도 무방하지만 코드를 읽는데 방해가 되는 경우도 있고 의도 하지 않은 식으로 변수가 정의될 수도 있기 때문에 크게 권장 하지는 않는다.

◆변수에 값을 넣고 빼기

다음 예제에서

d = e; 는 d와 e가 같다는 뜻이 아니고 d가 e와 같아지게 만들라는 뜻이다.

우변의 값을 좌변의 변수로 넣는 방식이다. 즉 e의 값을 읽어서 d에 넣게 만든다.

 

 

 

Section 02. 변수를 사용하는 규칙

◆반드시 지켜야 할 규칙

 

 

위 프로그램에서 옳은 것과 틀린 것은 어떤 것일까

*int bme;처럼 이미 정의된 변수의 이름은 사용이 불가능하다.

*변수 이름에는 알파벳, 숫자, 언더스코어(_)로 사용이 제한된다.

*언더스코어(_)외의 기호는 변수이름으로 사용이 불가능하다.

*숫자가 변수이름의 맨 앞에 오는 것은 허용되지 않는다.

*C++에서 변수의 이름 길이의 제한은 존재하지 않는다.

*변수는 알파벳의 대, 소문자를 구분한다.

*키워드는 변수 이름으로 사용할 수 없다. 키워드란 이미 C++안에서 내부적인

용도로 이미 사용하고 있는 단어들이다.

*변수의 이름을 지울 때는 띄어쓰기를 할 수 없다.

(★ 동일한 이름의 변수를 허용하는 경우 : 변수의 이름이 같아도 서로 다른 동네(namespace)에 존재하면 문제가 되지 않는다.

C에서 변수이름의 길이제한 : C프로그래밍 언어에서는 63자를 넘어가면 63자까지만 인식한다.

헝가리안 표기법 : 변수의 이름을 짓는 중에 헝가리안 표기법이란 것이 있다. (5장에서 설명))다음은 C++에서 이미 사용하고 있는 키워드의 리스트이다.

 

변수의 이름을 잘 짓는 법

변수의 이름은 누가 보던지 어느 정도 이해가 쉽도록 하는 것이 편하다.

단어와 단어를 구분할 수 있도록 짓는 것이 좋다.

변수의 이름은 필요 없이 긴 이름은 피하는 것이 보는 사람의 입장에서도 편하기 때문에

너무 불필요하게 긴 이름은 자제하는 것이 좋다.

 

변수는 언제 정의 하는 것이 좋은가

변수의 정의는 변수를 사용하기 직전에 정의 해주는 것이 좋다

맨 처음에 정의를 해버리면 어디에 쓰는 것인지 의문을 가지는 경우도 생기기 때문이다.

 

◆성적표 프로그램

지금까지 배운 것으로 성적표 프로그램을 하나 출력 해 본다.

 

 

 

Chapter 05 타입 1 – 정보의 종류

◆왜 여러 가지 타입을 배워야 할까

타입이란 변수가 보관할 수 있는 값의 종류를 의미한다

앞장(4장)에서 쓰인 int가 변수의 타입을 의미한다

Int 는 정수(integer)의 준말로 이 변수는 정수를 담을 수 있음을 의미한다.

컴퓨터는 정수를 계산하는 것보다 실수를 계산하는 것을 힘들어 한다.

정수의 종류는 변수가 차지하는 공간을 절약하기 위해 짧은 정수, 긴 정수로 구분한다.

C++의 기본타입 들이다. □로 표시 된 것은 타입의 구분을 의미한 것이고, ○로 표시 된 것은 실제적인 타입을 의미 한다.

Int, short int, long int 타입은 그에 상응하는 unsigned 타입이 존재한다. Unsigned 타입은 양수만을 보관할 수 있다.

Char, wchar_t는 정수타입으로 분류 되어 있지만 문자를 보관하는 데 사용한다.

Bool은 참 혹은 거짓 값만을 가질 수 있는 변수이다.

Float, double, long double은 보관할 수 있는 실수의 정밀도에 따라서 구분한다.

Void는 아무것도 없음을 나타내는 타입이다.

 

◆다양한 종류의 int 타입

보관하려는 값이 short int 타입의 변수에 들어갈 수 있다면 short int를 사용하라.

만약 더 큰 수고 음수가 아니라면 unsigned short int를 고려한다.

그것도 모자라다면 int 나 long int를 사용하자.

정수를 담을 때는 int를 사용하자.

보관하려는 값이 절대로 음수가 될 일이 없다면 unsigned int를 사용한다.

☞bit 와 byte

비트와 바이트는 컴퓨터에서 정보를 저장하는 최소의 단위이다.

1비트 = 2 = 2가지 상태

2비트 = 2x2 = 4가지 상태

3비트 = 2x2x2 = 8가지 상태

.

.

n비트 = 2x2x2x2….x2 = 2ⁿ가지 상태

 

1바이트 = 8비트

1킬로바이트 = 1024 바이트

1메가바이트 = 1024 킬로바이트

*4바이트는 2의 32승 = 즉 4294967296(약43억)개의 상태를 갖는다.

C++에서는 43억 이상이 되면 기본타입으로는 보관할 수 없다.

 

타입의 크기를 알아보는 방법

*short int, int, long int 는 각각 2바이트, 4바이트, 4바이트의 크기를 갖는다

*unsigned가 붙은 타입과 붙지 않은 타입의 크기가 같다.

 

 

10진수, 8진수, 16진수의 표현

8진수나 16진수로 적을 때는 숫자 앞에 공백 없이 0혹은 0x를 붙여주면 된다.

다음 값이 출력되는데 41은 8진수로 33, 16진수로 65이다.

결과 창에 출력하는 숫자들은 기본적으로 10진법을 사용하기 때문에 8진수와16진수 값이 위와 같이 나오는 것이다.

 

◆실수타입

실수를 보관할 수 있는 타입(float, double, long double)을 보통 부동 소수점 타입이라고 한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

실수타입의 사용

이 표에서 특이한 점은float 변수에서는 상수 뒤에 f를 붙이고 있는데 이는 실수 뒤에 f가 붙어있지 않으면 double타입에 상응하는 실수라고 컴퓨터는 인식하기 때문이다.

 

3.33E-3f = 3.33x10의-3승 = 0.00333

3.44E0 = 3.44x10의0승 = 3.44

4.24E2 = 4.24x10의2승 = 424로 표현된다.

 

실수 타입의 내부구조

고정 소수점 방식과 부동 소수점 방식의 차이를 예로 들어보면

0.000123을 보관하려면

고정 소수점 방식은

으로 표현할 것이고

부동 소수점 방식은

으로 표현할 것이다.

이와 같이 부동 소수점 방식을 사용하면 보다 넓은 범위의 숫자를 보관할 수 있다.

 

◆문자타입

Char 타입의 사용

 

위 표에서 보이듯이 문자 상수를 표현할 때는 작은 따옴표로 감싸주는 것을 볼 수 있다.

큰 따옴표로 감싸는 경우는 여러 개의 문자를 사용하는 경우에 해당하며 이는 17장에서 설명한다.

 

char형은 보통 1바이트의 크기를 가지며 그래서 가질 수 있는 모든 상태는 2의8승, 즉 256가지가 된다. 이런 약속 중에서 가장 널리 쓰이는 것이 ASCII코드이다. 이 코드에서는 대문자 A가 65와 대응된다고 하였는데 예제로 살펴보겠다.

 

이런 식으로 ASCII코드의 A는 65라는 것을 알 수 있다.

정수 타입이라면 65가 정수로 해석될 것이고 문자타입이라면 A로 표시될 것이다.

 

이스케이프 문자열

화면에 엔터를 출력하고 싶을 땐 어떻게 할까? 혹은 화면에 백스페이스를 출력하고 싶을 때는 어떻게 할까?라는 질문에 대한 대답이 이스케이프 문자열이다.

C++에서는 이런 종류의 특수문자를 의미하는 암호를 만들었는데 그것이 이스케이프 문자열이다.

모든 이스케이프 문자열은 역슬래쉬(\)로 시작한다. 역슬래쉬 뒤에는 미리 약속된 다양한 문자가 와서 여러 가지 특수 문자를 의미하게 된다.

 

◆Bool 타입

Bool타입의 변수에는 true 혹은 false의 값이 들어갈 수 있다.

5장에서는 간단한 사용법만 다룰 것이다.

결과 창에는 변수의 값이 true, false 가 아닌 1,0으로 나오는 것을 확인할 수 있다.

이는 bool변수의 내부적인 작동 방식과 관련이 있는데 bool변수 역시 실제로 보관하는 값은 정수다. 다만 이 값이 1이라면 true라고 해석하고 0이면 false라고 해석하게 된다.

 

헝가리안 표기법

헝가리안 표기법의 기본적인 아이디어는 변수의 이름 앞에 타입의 약자를 넣는 것이다.

만약에 무언가의 최대 크기를 담는 변수가 있다고 가정할 때 평범한 방식으로 정의를 한다면

Int maxSize;

maxSize = 100;

헝가리안 표기법에서는 숫자(numeric)의 약자인 n을 사용해서 이렇게 정의한다.

Int nMaxSize;

nMaxSize = 100;

다른 개발자가 이 코드를 보았을 때 nMaxSize의 변수의 정의부분은 보지 못했더라도 nMaxSize를 보았을 때 쉽게 정수형의 변수란 것을 알 수 있다.

 

Section 02. 형변환

형변환이란 int나 어떠한 변수의 형태에서 다른 변수로 형태를 바꾸는 것을 뜻한다.

5장에서는 기본적인 형변환을 배우게 될 것이다.

예제를 통해 대표적인 타입간의 형변환을 보여주고 있다.

 

 

int에서 float, char, bool로 형변환을 시켜보면 다음 값이 나온다.

형변환시에 값이 변화되는 경우도 있는데 변경되는 경우는 다음과 같다.

*실수 타입에서 정수타입으로 형변환이 발생하는 경우에는 실수의 소수점 이하 부분이 잘리게 된다.

*모든 타입에서 bool타입으로 형변환할 때, 모든 0이 아닌수는 true, 즉 1로 바뀐다. 0은 그대로 0으로 남아 false의 의미를 갖는다.

 

문제가 발생하는 형변환

형변환의 문제가 발생하는 공통적인 조건은 큰 타입에서 작은 타입으로 형변환이 일어 난다는 것이다. 작은 타입에 감당할 수 없을 만큼 수가 크다면 올바른 값을 담지 못하고 값의 일부가 잘려 나가거나 예상할 수 없는 이상한 값으로 변질된다.

 

명시적인 형변환

명시적은 explicit의 번역으로 눈에 보이는 방식으로 직접 무언가 하는 것을 말한다. 반대로 암시적, 묵시적은 implicit의 번역으로 눈에 보이지 않게 자동적으로 수행되는 것을 말한다. 지금까지 살펴본 형변환은 모두 암시적인 형변환이다.

명시적인 형변환을 위해서는 변수 혹은 값의 앞쪽에 괄호와 함께 타입을 적어주면 된다.

Ex)int 타입의 변수 i를 char와 bool타입으로 형변환 시킨다. I가 char와 bool타입의 변수에 대입됐을 때와 동일한 결과를 보여준다

Int I = 65;

Float f = 66.89f;

Char c = 'c';라고 정의할 때

 

cout<<"(char)i="<<(char)i<<"\n";

cout<<"(bool))="<<(bool)i<<"\n\n";

이렇게 결과를 출력하면

Int I = 65

<char>I =A

<bool>I =1

 

 

출처 – 뇌를 자극하는 c++

'프로그래밍언어 > C#' 카테고리의 다른 글

닷넷의 배경 및 특징, 네임스페이스가 뭐죠?  (0) 2010.12.31
C# 테이블  (0) 2010.12.27
C# 컨트롤  (0) 2010.12.27
C#의 클래스  (0) 2010.12.27
C++ 배열과 구조체와 포인터  (1) 2010.12.06