문자 (컴퓨팅): 두 판 사이의 차이

내용 삭제됨 내용 추가됨
잔글편집 요약 없음
편집 요약 없음
6번째 줄:
 
== char ==
{{본문|char}}
'''char'''는 character(문자)의 약자이다.
 
[[C 언어|C]]/[[C++]] 프로그래밍 언어에서의 '''char'''는 8비트 정수형 처리 변수이다. 그러나 정수형이라는 것은 CPU 입장에서는 그렇고 인간의 문자 처리를 위해 만들어 졌다. character의 약자가 변수를 지정하기 위한 char로
[[C 언어|C]] 및 [[C++]] 프로그래밍 언어에서의 '''char는''' 8비트 정수형 처리 변수이다. C언어 정수형의 처리에서 부호가 있는 sign형과 부호가 없는 unsigned형으로 선언하여 사용할 수 있다. 부호가 있는 변수는 char 만으로 선언된 변수이고, 부호가 없는 경우는 unsigned과 결합하여 선언 한다. 부호가 있는 정수형은 2의 보수 체계를 사용하여 +와 -로 나누어 숫자를 표현할 수 있다. char는 8비트 변수 이므로 부호형 변수는 -128~127까지의 숫자를 취급할 수 있다. [[중앙 처리 장치|CPU]]가 해당변수를 처리할 때는 해당 변수의 메모리 위치의 숫자를 CPU의 레지스터로 가져와 [[산술 논리 장치|ALU]]를 통해 계산할 수도 있다. 계산 결과는 레지스터로 저장되고 다음 프로그램 코드에 따라 사용 된다. 모든 CPU는 8비트 단위의 처리가 가능하므로 CPU의 레지스터 및 ALU을 통해 한번의 계산에 의해 이루어 진다. 계산의 종류는 4칙연산 뿐아니라 [[논리연산]], 비트 쉬프트 등 다양한 연산을 ALU을 통해 이루어 진다. 원래 char는 문자형 값을 처리하기 위한 변수 인데, character의 약자이다. 글자에서의 의미로 보면 [[ASCII]]의 문자형을 취급하여 계산하거나 처리 한다. ASCII 코드 값은 기본적으로 8비트 이므로 이것은 8비트 정수형의 부분집합일 뿐이다. 따라서 문자 만이 아니라 8비트 정수형 연산도 가능하다. 예를 들어 'A'를 'a'로 바꾸려면 정수형 연산으로 가능하다. 이때 역시 ALU을 통한 정수형 연산이 기계어 코드에 의해 계산 된다. 그러나 한글의 경우 보통 16비트([[KS X 1001]] 또는 [[유니코드]]) 이므로 char의 배열형이 필요하다. 따라서 한글은 char 변수만으로는 불가능하고 char 배열형으로 선언해야 한다. 또한 char 변수는 문자 뿐만 아니라 8비트의 정수형 변수의 연산이 가능하므로 문자 뿐만 아니라 일반적인 데이터를 처리 할 수 있다. 예를 들어 온도를 저장하기 위한 변수를 생각할 때, -128도 부터 127도 까지 처리 한다면 char 변수를 사용할 수 있다.
ASCII 코드 값은 기본적으로 8비트 이므로 이것은 8비트 정수형의 부분집합일 뿐이다. 따라서 char 변수는 [[아스키]](ASCII) 코드 처리를 할 수 있다. 기본적으로 char 변수는 정수형이기 때문에 아스키 코드의 변환 등에 계산을 통해 수행 할 수 있다. 예를 들어 'A'를 'a'로 바꾸려면 정수형 연산으로 가능하다. 따라서 8비트의 문자 코드 처리가 가능하다. 아스키 뿐만 아니라 UTF-8 코드 역시 처리가 가능하다. 문자를 처리할 때 C/C++에서는 문자열(string)의 끝에 0이라는 끝을 알리는 숫자가 들어가기 때문에 정해진 배열 크기 안에서 스트링 처리가 되어야 한다.
초기의 컴퓨터가 미국에서 개발되어 사용되어 질때, 8비트 코드 만으로 문자를 나타내는데 충분 했다. 그러나 최근의 많은 OS에서는 국제화 되면서 UNICODE 등의 16비트 체계를 많이 사용 한다. 따라서 char 변수로는 불가능 하다. char 배열 변수가 처리하고자 하는 충분한 문자열 길이를 갖더라도, UNICODE에서 알파벳의 한글자는 0+ASCII코드의 형태로 변수 영역에 저장 된다. 바로 이 숫자 때문에 한글자만 인식하는 문제가 발생 한다. 이를 해결하기 위해 wchar_t 변수를 사용하면 된다.
 
=== 선언wchar_t ===
* 가장 일반적인 변수의 사용은 문자를 처리하기 위해 선언한다.
 
초기에 컴퓨터의 문자 처리는 아스키의 8비트 만으로도 충분 했다. 따라서 C언어에서 처리는 char 변수로 충분 했다. 컴퓨터가 국제화 되면서 다양한 언어의 문자를 취급할 필요가 생겼다. 국제화를 하면서 다양한 문자 코드가 있으나 16비트 UNICODE을 많이 사용한다. 따라서 이것을 처리하기 위해 wchar_t가 도입 되었다.
<source lang="c">
char ch;
char ch = 'A';
char name[] = "홍길동";
</source>
 
 
* 영문자의 대문자를 소문자로 변환 하는 함수의 예.
 
<source lang="c">
// 영문자 중에 대문자를 소문자로 바꾼다.
char convUpperChar(char ech)
{
if (ech >= 'A' && ech <= 'Z') {
ech -= 'A';
ech += 'a';
}
return ech;
}
</source>
 
 
* 정수형 숫자를 취급하는 경우
 
<source lang="c">
#include <stdio.h>
 
int main(int argc, char**argv)
{
char temp = -3;
 
if (temp < 0)
printf("지금 온도는 영하 %d도 입니다.\n", temp);
else
printf("지금 온도는 영상 %d도 입니다.\n", temp);
 
return 0;
}
</source>
 
 
* 부호없는 숫자 취급 예
 
<source lang="c">
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define SZ_RANDNUM 100
 
unsigned char gRandNum[SZ_RANDNUM];
 
int main(int argc, char**argv)
{
int cnt;
int sum;
 
srand( (unsigned int) time(NULL));
 
for (cnt = 0;cnt < SZ_RANDNUM;cnt++)
gRandNum[cnt] = (unsigned char) (rand() % 100);
 
for (cnt = 0, sum = 0;cnt < SZ_RANDNUM;cnt++)
sum += (int) gRandNum[cnt];
printf("랜덤의 평균값은 %d 입니다.\n", sum / SZ_RANDNUM);
 
return 0;
}
</source>
 
=== 숫자 범위 ===
char 변수는 정수형인데 8비트의 숫자 범위에서 처리 된다.
 
<big>sign형 변수</big>
 
char cnum;
 
와 같이 선언된 변수는 +와 -을 처리하기 위한 8비트 [[2의보수]] 체계를 사용한다. 따라서 다음과 같이 [[2진수]]로 나타낼 수 있다.
 
{| class="wikitable" style="background-color:white;"
|-
! [[10진수]]
! [[2진수]]
|-
! 127
! 0111 1111
|-
! 126
! 0111 1110
|-
! 125
! 0111 1101
|-
! ...
! ...
|-
! 1
! 0000 0001
|-
! 0
! 0000 0000
|-
! -1
! 1111 1111
|-
! ...
! ...
|-
! -127
! 1000 0001
|-
! -128
! 1000 0000
|}
 
<big>unsign형 변수</big>
 
음수가 필요 없을 경우 다음과 같이 [[unsigned]]을 사용 한다.
 
unsigned char cnum;
 
와 같이 선언된 변수는 8비트 [[2진수]] 체계를 사용한다. 따라서 다음과 같이 2진수로 나타낼 수 있다.
 
{| class="wikitable" style="background-color:white;"
|-
! [[10진수]]
! [[2진수]]
|-
! 255
! 1111 1111
|-
! 254
! 1111 1110
|-
! 253
! 1111 1101
|-
! ...
! ...
|-
! 1
! 0000 0001
|-
! 0
! 0000 0000
|}
 
== word 문자 ==
'word' 문자는 일부 전산 측면에서 특별한 의미를 지닌다. word 문자는 일반적으로 A-Z (대,소문자)와 0에서 9까지의 숫자, 그리고 _를 포함한다.<ref>http://www.regular-expressions.info/charclass.html</ref><ref>See also the <code>[:word:]</code> [[:en:Regular_expression#POSIX_character_classes| regular expression character class]]</ref>
 
 
== 주석 ==