일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 파이썬
- 추천
- 무료 동영상 강의
- 동영상
- 실습으로 다지는 c#
- 안드로이드 앱 개발
- 언제나 휴일
- 표준 라이브러리 함수
- 알고리즘
- 언제나휴일
- c#
- 소스 코드
- 원격 제어 프로그램
- 네트워크 프로그래밍
- 충남 천안
- 표준 입출력
- 동영상 강의
- 소켓 통신
- 클래스 다이어그램
- 실습
- 강의
- C++
- Windows Forms
- 캡슐화
- 프로젝트
- 산책하기 좋은 곳
- 졸업 작품
- c언어
- 유튜브 동영상 강의
- 졸업 작품 소재
- Today
- Total
프로그래밍 언어 및 기술 [언제나휴일]
Part 3. 형식과 메모리 크기, 진수 표현 본문
Part 3. 형식과 메모리 크기, 진수 표현
9. 기본 형식(TYPE)
프로그래밍 언어에서는 데이터를 표현하는 문법으로 형식과 변수를 제공해요.
형식은 데이터의 종류와 표현 범위에 따라 메모리 크기와 범위를 약속하고 있어요.
실제 메모리가 필요할 때 형식을 지정하여 변수를 선언하면 약속한 메모리를 할당받아 사용할 수 있어요.
C 언에에서 제공하는 형식에는 문자, 정수, 실수를 표현할 때 사용하는 기본 형식이 있어요.
그리고 여러개의 원소를 연속적인 메모리에 할당받아 사용하는 배열과 프로그램의 메모리 주소를 기억하는 포인터도 있죠.
이 외에 개발자가 프로그램에 필요한 형식을 정의하는 문법을 제공합니다.
개발자가 정의하여 사용하는 형식을 사용자 정의 형식이라고 부르며 구조체, 공용체, 열거형이 있어요.
컴퓨터에 데이터를 저장하는 장치인 메모리의 양은 유한한 자원이죠.
이러한 이유로 정수를 표현하기 위한 형식도 특정 범위에서 표현할 수 있어요.
C언어에서는 표현 범위에 따라 다양한 정수 형식을 제공합니다.
특히 문자 형식은 표현 범위가 작은 정수 형식으로 취급하고 있어요.
그리고 실수는 오차 범위를 갖는 근사치 표현이예요.
10.정수 형식과 표현 범위
C언어에서는 표현할 수 있는 범위에 따라 여러 종류의 정수 형식을 지원합니다.
1바이트에서 8바이트까지 다양한 종류의 정수 형식을 지원하죠.
다음은 다양한 정수 형식의 메모리 크기를 확인하는 예제입니다.
sizeof를 사용하면 메모리 크기를 알 수 있어요.
그리고 printf 문의 첫 번째 인자 문자열에 %d를 사용하면 10진수로 출력합니다.
#include <stdio.h>
int main()
{
printf("정수 형식의 크기 확인\n");
printf("char : %d \n", sizeof(char));
printf("unsigned char : %d \n", sizeof(unsigned char));
printf("short : %d \n", sizeof(short));
printf("unsigned : %d \n", sizeof(unsigned short));
printf("int : %d \n", sizeof(int));
printf("unsigned int : %d \n", sizeof(unsigned int));
printf("long : %d \n", sizeof(long));
printf("unsigned long : %d \n", sizeof(unsigned long));
printf("long long : %d \n", sizeof(long long));
printf("double long : %d \n", sizeof(double long));
return 0;
}
◈ 실행 결과
정수 형식의 크기 확인
char : 1
unsigned char : 1
short : 2
unsigned : 2
int : 4
unsigned int : 4
long : 4
unsigned long : 4
long long : 8
double long : 8
11.메모리, 10진수, 2진수, 16진수
2024년 3월 전후로 새롭게 동영상 강의를 업로드할 예정입니다.
메모리 최소 단위는 1비트로 0과 1을 표현할 수 있어요.
프로그램에서 할당하는 최소 메모리 단위는 1바이트(8비트)입니다.
C언어에서 char 형식이 1바이트입니다.
그리고 1바이트로 표현할 수 있는 가지 수는 2의 8승으로 256가지입니다.
메모리에 있는 값을 표현할 때 10진수는 불편할 수 있어요.
예를 들어 2바이트 메모리에 500이 있을 때 첫 번째 바이트에 있는 값과 두 번째 바이트에 있는 값을 표현하는 것은 불편합니다.
10진수 500은 2진수로 표현하면 111110100(2) 입니다.
따라서 첫 번째 바이트에는 1(2) 이고 두 번째 바이트에는 1111 0100(2)이 들어있습니다.
10진수 500은 8진수로 표현하면 764(8)입니다.
8진수 764(8)은 이진수로 표현하면 111 110 100(2)입니다.
따라서 첫 번째 바이트에는 1(2)이고 두 번째 바이트에는 11110100(8)이 들어 있습니다.
8진수를 2진수로 변환하는 것은 쉽지만 여전히 메모리에 있는 값을 표현하는 것은 불편하네요.
10진수 500은 16진수로 표현하면 1F4(16)입니다.
따라서 첫 번째 바이트는 1(16)이고 두 번째 바이트에는 F4(16)이 들어있습니다.
16진수는 메모리에 있는 값을 보다 편하게 표현할 수 있네요.
이러한 이유로 프로그램에서 16진수 표현은 자주 사용합니다.
C언어에서 8진수는 수 앞에 0(영)을 붙여 표현합니다.
0764는 8진수 764(8)을 의미하며 10진수 500과 같은 값입니다.
C언어에서 16진수는 수 앞에 0x(영엑스)를 붙여 표현합니다.
0x1F4는 16진수 1F4(16)을 의미하며 10진수 500과 같은 값입니다.
참고로 printf 함수에서 10진수로 값을 출력할 때 포멧은 %d이며 8진수는 %o(영어 오), 16진수는 %x 혹은 %X입니다.
printf 함수에서 %#x 처럼 #을 붙이면 진수 표현도 같이 출력합니다.
#include <stdio.h>
int main()
{
printf("%d %d %d\n", 500, 0764, 0x1F4);
printf("%d %o %X\n", 500, 500, 500);
printf("%#d %#o %#X\n", 500, 500, 500);
return 0;
}
실행 결과
500 500 500
500 764 1F4
500 0764 0X1F4
1. 2진수 01010010은 10진수로 얼마인지 계산하시오.
답: 0*128+1*64+0*32+1*16+0*8+0*41*2+0*0 = 82
2. 2진수 01010010은 16진수로 얼마인지 계산하시오.
답: 0101(2진수) =5(16진수) , 0010(2진수)=>2(16진수) 따라서 이진수 01010010는 16진수로 0x52
3. 16진수 0x52는 10진수로 얼마인지 계산하시오.
답: 5*16 + 2*1 = 82
4. 10진수 37을 이진수로 얼마인지 계산하시오.
답: 37 = 32 + 4 + 1 = 100101(이진수)
5. 16진수 0x25를 이진수로 얼마인지 계산하시오.
답: 2(16진수) = 0010(이진수), 5(16진수) = 0101(2진수) 따라서 16진수 0x25는 이진수 00100101
6. 10비트로 표현할 수 있는 데이터 가지수는?
답: 2의 10승
7. 4바이트 메모리의 데이터를 2진수로 나타내기 위해 필요한 자리수는?
답: 1비트에 1자리이므로 32 비트/1 = 32, 따라서 32자리
8. 4바이트 메모리의 데이터를 16진수로 나타내기 위해 필요한 자리수는?
답: 4비트에 1자리이므로 32비트 / 4 = 8 , 따라서 8자리
'C & C++ > 디딤돌 C언어' 카테고리의 다른 글
명명법과 형식 정리하기 (0) | 2024.01.09 |
---|---|
Part 7. 실수 표현과 메모리 구조 (0) | 2024.01.09 |
Part 6. 정수 형식의 표현 범위와 Overflow 값 잘림 현상 (1) | 2024.01.09 |
Part 5. 문자 형식과 ASCII 코드 (1) | 2024.01.09 |
Part 4. 부호 있는 정수 표현 방법 (0) | 2024.01.09 |
정리하기 (C언어 소개 ~ 첫 번째 프로그램, Part 1, 2) (0) | 2024.01.09 |
Part 2. 첫 번째 프로그램 Hello, World! (0) | 2024.01.09 |
Part1. C언어 소개 (0) | 2024.01.09 |