본문 바로가기
C++/기초

C++ 기초 : 문자

글: 시플마 2024. 4. 1.

아래 코드를 보시죠.

 

char형 변수 c를 선언하고 1을 대입했고

bool형 변수 b를 선언한 후 1을 대입했습니다.

 

 

1을 대입한 변수 b의 값은 true네요.

bool형은 1Byte 크기를 가진 자료형으로

bool형 변수에 0이 들어오면 false,

1이 들어오면 true로 인식하기 때문입니다.

 

 

변수 c의 값도 확인해 보죠.

1이 들어가 있긴 한데 뒤에 '\x1'가 같이 있네요.

 

무슨 의미일까요?

 

char형은 정수 1Byte를 담을 수 있습니다.

특히 문자를 표현하는데 사용하죠.

char형 변수에 숫자를 넣으면

그에 대응하는 문자가 출력되는 것입니다.

 

아래 표를 보시죠.

출처 : https://ko.wikipedia.org/wiki/ASCII

 

컴퓨터는 위와 같은 표를 기준으로

숫자에 대응하는 동작을 하거나 문자를 출력하는 것입니다.

이러한 표의 내용을 ASCII 코드라고 합니다.

 

char형 변수 c에 1을 대입했었죠?

표를 확인해 보니 십진법을 기준으로 1은 SOH에 해당합니다. 

 

우리는 c에 단순히 숫자를 넣었다고 생각했습니다.

물론 변수 c의 공간에는 1이 들어가 있습니다. 

그러나 변수 c는 문자와 관련된, char형이기 때문에

결괏값이 다르게 표현될 수 있는 것이죠.

 

 

다른 예시도 살펴보죠.

 

이번에는 char형 변수 c에 정수 1이 아닌 문자 1을 넣었습니다.

근데 c에는 49라는 숫자가 저장되었습니다.

 

아래 표에서도 볼 수 있듯이

출처 : https://ko.wikipedia.org/wiki/ASCII

 

문자 1은 십진법 기준, 49로 표현하기 때문입니다.

 

 

 


 

 

 

 

문자를 담을 수 있는 자료형이 더 있습니다.

바로 'wchar_t'입니다. 크기는 2Byte입니다.

 

wchar_t형 변수 wc에 49를 대입하였습니다.

밑에 short형 변수 s에도 49를 넣었습니다. 

 

 

정수 형태로 값을 해석하는 short형 변수 s에는

그래도 49가 대입되었습니다. 

 

 

wchar_t형 변수 wc에도 49가 대입되었으나,

1이라는 값이 보이네요.

 

ASCII 코드를 살펴보면

출처 : https://ko.wikipedia.org/wiki/ASCII

 

문자를 표현하는 wchar_t형 변수 wc에 49가 대입되었죠?

표에서 보면 십진법 기준으로 49는, 1로 표현된다는 것이 보입니다.

 

 

같은 값을 대입했음에도 어떤 자료형이냐에 따라

다르게 해석될 수 있는 것을 다시 느낄 수 있네요.

 

 

그럼 대문자 A를 표현하고 싶으면  wchar_t형 변수 wc에

몇을 대입하면 될까요? 65를 넣으면 될 것입니다.

 

실행 결과입니다. 대문자 A가 표현되는 것을 확인할 수 있습니다.

 

 

이번에는 반대로 문자를 넣어 보겠습니다.

 

대문자 A를 넣으니 변수 wc에는 65가 담겨 있음을 확인할 수 있습니다.

 

 

 


 

 

 

 

 

그럼 단일 문자가 아닌 문자열은 어떻게 표현되는 걸까요?

 

문자 459가 있습니다.

 

문자열은 단일 문자가 여러 개 모여 구성되죠.

즉 하나의 공간을 차지하고 있는 단일 문자가 모여

하나의 문자열을 이루는 것입니다.

 

그림으로 나타내면 아래와 같습니다.

 

459라는 문자열을 표현하기 위해, 문자열을 하나씩 나누어 공간을 사용합니다.

 

ASCII 코드를 보면 4를 표현하기 위해 첫 번째 공간에는 52가 들어가야 합니다.

두 번째 공간에는 5를 표현하기 위해 53이,

세 번째 공간에는 9를 표현하기 위해 57이 들어가야 하죠.

(물론 52, 53, 57이 이진법으로 들어가 있겠죠.)

 

숫자 255 이하로 모든 문자를 표현할 수 있으므로 각 공간은 1Byte면 충분할 겁니다.

 

 

근데 이렇게만 하면 컴퓨터 입장에서 혼란스럽습니다.

몇 번째 공간까지 문자로 볼 것인지 알 수 없기 때문입니다. 

 

그래서 아래 그림처럼

 

문자열이 끝나는, 다음 공간에 0을 넣습니다.

0을 만나면 문자열의 끝으로 인식하게 되어 거기까지만 읽습니다.

 

십진법으로 표현한 0은 ASCII 코드에서 

출처 : https://ko.wikipedia.org/wiki/ASCII

 

NULL Character를 의미하네요.

컴퓨터는 NULL을 만남으로써 문자열이 끝났음을 인지합니다.

 

 

여기서 헷갈릴 수 있는 부분이 있습니다.

 

NULL Character를 공백과 같은 것이라고 오해할 수 있죠.

 

그러나 이 둘은 다릅니다. 

 

ASCII 문자표를 보면

 

공백(SPACE, 띄어쓰기)은 32라는 값으로 표현합니다.

 

즉 아래 코드처럼

 

문자열 459에서 4와 5사이에 공백을 넣으면

 

메모리 상태는 아래 그림처럼 된다는 것이죠.

 

 

 

 

 

 

강의 출처 : https://www.youtube.com/watch?v=PFc4g8mxOiI&list=PL4SIC1d_ab-aOxWPucn31NHkQvNPHK1D1&pp=iAQB


'C++ > 기초' 카테고리의 다른 글

C++ 기초 : 문자열 (2)  (0) 2024.04.03
C++ 기초 : 문자열 (1)  (0) 2024.04.02
C++ 기초 : void  (0) 2024.03.31
C++ 기초 : const 포인터 예시  (0) 2024.03.31
C++ 기초 : const 포인터  (0) 2024.03.31