모든사람꺼

imakeworld.egloos.com

포토로그 마이가든 방명록




기본 형식 - 문자, 정수, 실수형 C샵

기본 형식 - 문자, 정수, 실수형 

 

다루는 내용

    - 문자형 

    - ASCII CODE

    - 정수형

    - 실수형

    - float형의 메모리에 저장 방식

 

기본 형식

char, unsigned char, signed char1 byte
short, unsigned short2 bytes
int, unsigned int2 or 4 bytes
long, unsigned long4 bytes
float4 bytes
double8 bytes
long double8 bytes

 

1. 문자형

 문자형은 1개의 문자를 표현(및 저장)할 수 있는 형식이다.  여러개의 문자를 표현하기 위해서는 메커니즘 형식인 배열(혹은 포인터)을 사용해야 한다. 

  

문자형
char, signed char-127 ~ 128
unsigned char0~255

 

문자형 형식은 메모리 1바이트의 크기를 갖고 있기 때문에 256가지의 표현 범위를 넘는 데이터 표현에는 부적절하다.  

문자형 형식으로는 NULL(0)을 포함한 127까지의 기본 문자에 부호를 포함하는 char(signed char는 char와 정확히 일치한다.)와 0~255까지 표현할 수 있는 unsigned char형이 있다.

 

그리고, C언어 사용자가 문자 표현을 용이하게 하기 위해 리터럴 문자 상수를 정의하고 있으며 이의 기준은 아스키 코드(ASCII code)이다. 

 

리터럴

 프로그래밍 언어에서는 데이터 값을 표현하기 위해 리터럴 상수를 제공하고 있다. 

문자형을 위한 리터럴은 'a', 'b', ...와 같은 형태로 단일 따옴표 안에 한개의 문자를 표현 할 수 있다.

또한, '와 같은 단일 따옴표 처럼 이미 다른 목적으로 표현되거나 기능 키에 해당하는 문자를 escape문자라 하여 별도의 표현으로 리터럴을 정의하였다. 

 

 이러한 리터럴 문자의 경우 사용 목적은 char형 데이터 표현에 많이 사용되겠지만 C언어에서는 int형 형식으로 정의를 하였다.  그렇지만, char형의 경우 int형과 묵시적으로 형 변환을 처리해 주기 때문에 우리가 고민할 부분은 없다.  물론, C++언어에서는 좀 더 높은 신뢰성을 추구하는 철학이 있어서 그런지 문자형 리터럴 상수를 char형으로 취급하고 있다.

  

escape 문자

'\a'경고음'\r'캐리지 리턴'\''단일 따옴표
'\b'back space'\t''\"'이중 따옴표
'\n'라인 변경'\\'백슬러시'\?'물음표

  

그리고, 문자열을 표현하기 위해 "abc"와 같이 이중 따옴표 안에 n개의 문자를 넣을 수 있게 하였으며 이를 문자열 리터럴 상수라 얘기한다.

 

이 외에 ..., -4, -3, -2, -1, 0, 1, 2, 4,...과 같이 정수표현에 대한 리터럴은 우리가 사용하는 수와 동일하게 제공하고 있고

숫자 앞에 0x(영엑스)를 붙여서 8진수 표현과 16진수 표현도 할 수 있게 하고 있다.

 

실수를 위해서는 -12.02과 같은 부동 소수점을 사용하는 표현과 을 제공하고 있고 -1.202e1과 같은 지수 표현도 할 수 있게 하고 있으며 실수에 대한 표현은 double형으로 정의되어 있으며 -12.02f 혹은 -1.202e1f와 같이 뒤에 f를 추가하면 float형에 대한 표현이 된다.

 

아스키 코드(ASCII code)

 원래 아스키 코드는 컴퓨터 장치와 장치간에 제어 신호에 대한 정의였었는데 C언어를 비롯한 많은 프로그래밍 언어에서 문자형을 표현하는 기준이 되었다.  (C#과 같은 언어에서는 표현은 가능하지만 기준은 아니다.) 

  

ASCII code

10진수16진수문자10진수16진수문자10진수16진수문자10진수16진수문자
00NUL4129)8151Q12179y
11SOH422A*8252R1227Az
22STX432B+8353S1237B{
33ETX442C,8454T1247C|
44EOT452D-8555U1257D}
55ENQ462E.8656V1267E~
66ACK472F/8757W1277FDEL
77BEL483008858XNUL:NULL
SOH: 데이터 전송 시작
STX: 본문 시작
ETX: 본문 종료
EOT:전송 종료
ENQ:응답 요구
ACK: 긍정 응답
BEL: 경고음
BS:Back Space
HT:수평 탭
LF:개행
VT:수직 탭
FF 다음 페이지
CR:Carriage Return
SO: 확장문자 시작
SI:확장문자 종료
DEL: 전송 제어 확장
DC1: Device Control 1
DC2: Device Control 2
DC3: Device Control 3
DC4: Device Control 4
NAK:부정 응답
SYN:Synchronous idle
ETB:전송 블록 종료
CAN:취소
EM: 매체 종료
SUB:치환
ESC
FS:파일 경계
GS:그룹 경계
RS:레코드 경계
US:장치 경계
88BS493118959Y
99HT50322905AZ
100ALF51333915B[
110BVT52344925C\
120CFF53355935D]
130DCR54366945E^
140ESO55377955F_
150FSI563889660`
1610DLE573999761a
1711DCI583A:9862b
1812DC2593B;9963c
1913DC3603C<</FONT>10064d
2014DC4613D=10165e
2115NAK623E>10266f
2216SYN633F?10367g
2317ETB6440@10468h
2418CAN6541A10569i
2519EM6642B1066Aj
261ASUB6743C1076Bk
271BESC6844D1086Cl
281CFS6945E1096Dm
291DGS7046F1106En
301ERS7147G1116Fo
311FUS7248H11270p
3220Space7349I11371q
3321!744AJ11472r
3422"754BK11573s
3523#764CL11674t
3624$774DM11775u
3725%784EN11876v
3826&794FO11977w
3927'8050P12078x
4028(8353S1267E~

   

 위 처럼 리터럴 상수를 표시를 하면 해당하는 ASCII code값이 출력됨을 볼 수 있다. 

  

2. 정수형

 정수형은 음수를 포함해서 표현하는 short, int, long과 표현하지 않는 unsigned short, unsigned int, unsigned long을 제공하고 있다. 

 표현할 수의 범위에 따라 선택할 수 있을 것이며 int는 컴파일러나 O/S에 따라 2바이트인 경우와 4바이트인 경우가 있는데 대부분 프로그램에서는 이에 대한 고민을 하지 않는다 해서 문제가 되지는 않는다.  다만 실제 작성할 프로그램이 이러한 것이 문제가 될 요소가 있다면 short와 long형을 사용할 수는 있을 것이다.  그렇지만 모든 프로그래밍을 할 때 그런 습관은 이미 많은 개발자들이 쌓아놓은 습관을 등질 수 있는 길이라 고독할 것이며 프로젝트 규모가 커져 같이 프로그래밍 작업을 요구하는 시대적 요구에 비추어 보았을 때 결코 적절한 선택은 아니라 본다.(물론, 잘못된 선택이라 비난할 수는 없을 것이다. but, …)

 또한, 컴파일러에 따라 8바이트를 표현할 수 있는 long long 형식이나 double long형식을 제공하는 경우도 있다.

 

정수형

short, unsigned short–32,768 ~ 32,767
unsigned short0 to 65,535
intshort 이나 long과 같음
unsigned intunsigned short이나 unsigned long과 같음
long–2,147,483,648 ~ 2,147,483,647
unsigned long0 ~ 4,294,967,295

 

3. 실수형

 0.5에서 0.6 사이에는 몇 개의 실수가 있는가?  무한 개의 실수가 있다는 것은 모두 알고 있는 사실일 것이다.  그렇다면 컴퓨터에서 실수는 어떻게 표현하고 어떻게 메모리에 저장이 될까? 

정답은 근사치이다. 즉, 실수형은 정확한 수치 표현이 불가능하기 때문에 특정 오차 범위의 데이터를 표현할 수 밖에 없다.

  

정확한 실수는 컴퓨터로 표현될 수 없다.

0.1을 몇 번을  더하면 과연 1.0일 되는가?  다음 그림을 보고 판단을 해 보라.

 

  

 

그렇다면 실수는 메모리에 어떻게 저장이 되는가? 

부호를 표현하는 비트와 지수부, 가수부를 표현하는 비트가 약속되어 있다.  다음 그림은 float형의 경우이다.

 

참고로 double형은 부호 비트 1비트, 지수부가 11비트이고 가수부가 52비트이다.

 

예를 들어 -12.875라는 수가 어떻게 저장되는지 살펴보자.

-12.875 = - (12.875) = - (12 + 0.875)

12 는 이진수로 1100 이라는 것을 알 것이다.

0.875 = 0.5(2의 -1승) + 0.25 (2의 -2승) + 0.125(2의 -3승)

 

따라서

-12.875=  - 1100.111(2)  = -1.100111 (2)  *  2의 3승

 

부호비트는 1

지수부는 3이므로  10000010

가수부는 10011100000000000000000 이다. (맨 앞의 1.은 언제나 동일하므로 메모리에 표현하지 않고 생략한다.)

 

즉,  1100 0001 0100 1110 0000 0000 0000 0000

c 1 4 e 0 00 0

 

 

 

 

출처 : [직접 서술] 블로그 집필 - ehclub

신고

의견 쓰기


트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://imakeworld.egloos.com/tb/9594285 [도움말]

덧글

  • 나도사랑을했으면 2009/04/23 15:41 # 답글

    컴퓨터에 대해 지식이 엄청 많으신가보네요.. 님을 제 블로그에 링크하고 오늘 처음으로 방문하여 최근글 몇개만 보고 있는데.....

    이런것 올릴려면 보통 글쓰기보다 훨씬 시간걸리고 힘들지 않나요?

    전, 잘 모르지만 아래글등을 보면서 그런 생각을 하였는데...


    일단 블로그에는 많은 자료가 있는것 같습니다. 그래서 틈틈히 오고 싶은데요.

    제 관심사랑 좀 차이가 많이 나는것 같기도 하고.... 사실 전 역사에 관심이 많거든요. 가끔 한문사료해석글들을 보면 희열이 느껴지기도...

    그외 사회 비평등에 관심이 쫌 있습니다.

    네... 그럼 저는 이만 글을 마치도록 하겠습니다. 좋은 하루 보내십시오.
덧글 입력 영역