본문 바로가기

BackEnd/C

문자의 표현방법과 문자 관련 표준함수들

반응형

1. 컴퓨터의 문자 인식 및 표현 방법



c프로그램상에서 표현하는 모든 문자들은 컴파일러에 의해 숫자로 변환된다. 




변환된 숫자를 cpu에 전달되기 때문에 cpu가 인식을 할 수 있는거고, 


cpu는 정확히 문자인지?숫자인지는 모르고, 요구하는 연산만 단순히 처리할뿐이다.


연산 결과도 숫자로 표현되는데, 이 숫자를 운영체제가 다시 문자로 변환 해준다.


즉 실행과정에서의 문자의 입출력(scanf, printf함수)은 운영체제에 의해서 처리가 된다.


그리고 이 숫자와 문자사이에서의 변환은 약속이 근거가 되야한다. 


c프로그램에서는 문자 'A'를 65로 표현하기로 약속했다고 가정하면 컴파일러는 A를 65로 바꾼다.


그런데 운영체제는 65숫자를 받아서 'B' 로 출력한다고 인식하고 있다고 한다면 문제가 될 것이다.


결론적으로, 문자와 숫자의 변환 사이에 문제가 없으려면 컴파일러,운영체제 모두 따르는 규약이 있


어야 한다. 그러한 규약들이 대표적으로 아스키,유니코드라는 규약이 있다. 


C프로그램은 아스키코드 규약을 이용해 숫자와 문자사이에 변환을 처리 한다. 


그리고 운영체제 또한 아스키코드 규약을 인식하고 있다. 


그래서 문자를 표현하기 위한 규약은 프로그래밍 언어에 의존적이다.



2. 아스키 코드


한글은 약속하지않고, 영어 대소문자,특수문자,숫자등을 포함해 128개의 문자를 정의하고 있다.


2의7승은 128이기 때문에 1바이트(7비트)로 표현이되는 코드 집합이다.



3. 문자끼리 덧셈과 뺄셈이 가능하다.


내부적으로 문자가 숫자로 표현되니 아래와 같은 코드도 가능하다.


1
2
3
4
5
6
7
8
9
10
11
int main(void)
{
    char   ch1 = 'A';
    short  ch2 = 'A' - 'B' + 'C';
    int    ch3 = 'C';
 
    printf("%c %c %c \n", ch1, ch2, ch3);
    printf("%d %d %d \n", ch1, ch2, ch3);
 
    return 0;
}



1
2
A B C
65 66 67
cs



4. 문자 관련 함수들


숫자인지?


1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <ctype.h>
 
int main(void)
{
    char ch = '0';
 
    if(isdigit(ch))
        printf("숫자입니다. \n");
    else
        printf("숫자가 아닙니다. \n");
    
    return 0;
}
cs

알파벳인지?


1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <ctype.h>
 
int main(void)
{
    char ch = 'a';
 
    if(isalpha(ch))
        printf("알파벳입니다. \n");
    else
        printf("알파벳이 아닙니다. \n");
    
    return 0;
}
cs


소문자인지?대문자인지?


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <ctype.h>
 
int main(void)
{
    char ch = 'A';
 
    if(islower(ch))
        printf("소문자입니다. \n");
 
    if(isupper(ch))
        printf("대문자입니다. \n");
 
    return 0;
}
cs


반응형

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

메모리 구조  (0) 2019.03.05
  (0) 2019.03.05
반복문  (0) 2019.03.04
스코프(scope)  (0) 2019.03.04
swtich문  (0) 2019.03.03