티스토리 뷰
Basic Types
■ C에서는 근본적으로 다른 두가지 숫자 타입(정수 타입, 부동 소수점 타입)을 지원한다.
Singed and Unsigned Intergers
■ 부호있는 정수의 가장 왼쪽 비트 (부호 비트라고 함)는 숫자가 0이거나 양수이면 0이고 음수이면 1이다. 따라서 가장 큰 16비트 부호있는(signed) 정수는 0111 1111 1111 1111(2^15-1)이고 부호없는(unsigned) 정수는 1111 1111 1111 1111(2^16-1)이다. 둘의 차이점은 가장 왼쪽 비트(부호비트) 이다.
■ C에서 일반적으로 int는 32비트 이지만 오래된 CPU에서는 16비트 일 수도 있다.
Integer Types on a 16-bit Machine
Type | Smallest Value | Largest Value |
short int | -32,768 (-2^15) | 32,767 (2^15-1) |
unsigned short int | 0 | 65,535 (2^16-1) |
int | -32,768 (-2^15) | 32,767 (2^15-1) |
unsigned int | 0 | 65,535 (2^16-1) |
long int | -2,147,483,648 (-2^31) | 2,147,483,647 (2^31-1) |
unsigned long int | 0 | 4,294,967,295 (2^32-1) |
Integer Types on a 32-bit Machine
Type | Smallest Value | Largest Value |
short int | -32,768 (-2^15) | 32,767 (2^15-1) |
unsigned short int | 0 | 65,535 (2^16-1) |
int | -2,147,483,648 (-2^31) | 2,147,483,647 (2^31-1) |
unsigned int | 0 | 4,294,967,295 (2^32-1) |
long int | -2,147,483,648 (-2^31) | 2,147,483,647 (2^31-1) |
unsigned long int | 0 | 4,294,967,295 (2^32-1) |
Integer Types on a 64-bit Machine
Type | Smallest Value | Largest Value |
short int | -32,768 (-2^15) | 32,767 (2^15-1) |
unsigned short int | 0 | 65,535 (2^16-1) |
int | -2,147,483,648 (-2^31) | 2,147,483,647 (2^31-1) |
unsigned int | 0 | 4,294,967,295 (2^32-1) |
long int | -9,223,372,036,854,775,808(-2^63) | 9,223,372,036,854,775,807 (2^63-1) |
unsigned long int | 0 | 18,446,744,073,709,551,615 (2^64-1) |
■ 위 표의 표시된 범위는 C 표준에 의해 요구되지 않으며 컴파일러 마다 다를 수 있다. 특정 구현에 대한 정수 유형의 범위를 결정하는 한 가지 방법은 표준 라이브러리의 일부인 <limits.h> 헤더파일은 확인하는 것이다.
Integer Constants
■ C는 정수 상수를 10진수, 8진수 또는 16진수로 작성할 수 있도록 한다.
■ 10진수(Decimal) : 10진수 상수는 0에서 9사이의 숫자를 포함하지만 0으로 시작해서는 안된다.
ex) 15, 255, 32767
■ 8진수(Octal) : 8진수 상수는 0에서 7사이의 숫자만 포함하며 0으로 시작해야 한다.
ex) 017, 0377, 077777
■ 16진수(Hexadecimal) : 16진수 상수는 0에서 9사이의 숫자와 a와 f사이의 문자를 포함하며 항상 0x로 시작한다.
ex) 0xf, 0xff, 0x7fff
■ 컴파일러가 상수를 long integer로 처리하기 위해서는 뒤에 문자 L(또는 l)을 붙여야 한다.
ex) 15L, 0377L, 0x7fffL
■ 상수가 부호없다면 문자 U(또는 u)를 붙여야한다.
ex) 15U, 0377U, 0x7fffU
■ L과 U를 조합하여 쓸 수도 있다.(L과 U의 순서는 중요하지 않다.)
Floating Types
Floating Type Characteristics(IEEE Standard)
Type | Smallest Postitive Value | Largest Value | Precision |
float | 1.17549 x 10^-38 | 3.40282 x 10^38 | 6 digits |
double | 2.22507 x 10^-308 | 1.79769 x 10^308 | 15 digits |
■ 57.0을 표현하는 다양한 방법
=> 57.0 57. 57.0e0 57E0 5.7e1 5.7e+1 .57e2 570.e-1
■ 기본적으로 부동 소수점 상수는 double-precision 숫자로 저장된다. 즉, C 컴파일러가 프로그램에서 상수 57.0을 찾으면 숫자가 double 변수와 동일한 형식으로 메모리에 저장되도록 배열한다. 이 규칙은 필요에 따라 double 값이 자동으로 float로 변환되기 때문에 일반적으로 문제가 되지 않는다.
Character Types
■ C는 문자를 작은 정수로 취급한다. 예를 들어 ASCII에서 문자 코드의 범위는 이진수 0000000에서 1111111까지이며 0에서 127까지의 정수로 생각할 수 있다.
■ 문자 상수로 사용되는 경우 이스케이프 시퀀스는 작은 따음표로 묶어야 한다. 예를들어, 이스케이프문자를 나타내는 상수는 '\33'(8진수) 또는 '\x1b'(16진수)로 기록된다. 이스케이프 시퀀스는 암호화된 경향이 있기 때문에 #define으로 이름을 지정해주는 것이 좋다.
Reading and Writing Characters using getchar and putchar
■ C는 문자를 읽고 쓰는 다양한 방법을 제공한다. 특히 scanf 및 printf를 호출하는 대신 getchar 및 putchar 함수를 사용할 수 있다.
■ getchar는 실제로 문자값아닌 정수를 반환한다. 결과적으로 변수가 getchar에서 읽은 문자를 저장하는 데 사용하는 경우 char 대신 int 타입을 갖는 것은 드문 일이 아니다. scanf와 마찬가지로 getchar는 공백 문자를 건너 뛰지 않는다.
Q. Why getchar and putchar are faster than scanf and printf.
A_1) getchar와 putchar는 다양한 타입의 데이터를 읽고 쓰도록 설계된 scanf및 printf보다 훨씬 간단하다.
A_2) getchar와 putchar는 일반적으로 추가 속도를 위해 매크로로 구현된다.
■ 부호있는 피연산자와 부호없는 피연산자과 혼합될경우 부호있는 피연산자가 부호없는 피연산자로 변하게 된다. 이 규칙은 모호한 프로그래밍 오류를 일으킬 수 있다.
Q&A
Q. 정수 i 가 음수일 경우 8진수 또는 16진수로 어떻게 출력 할수 있을까?
A. if( i < 0 ) printf("-%x", -i); // 부호비트를 수의 일부라 생각하기때문에 예상치 못한 큰 값이 나올수있다.
else printf("%x", i);
- Total
- Today
- Yesterday
- C++게임
- tetris
- 백준 2365
- 코드포스
- ICPC 후기
- 홍정모의 게임 만들기 연습 문제 패키지
- opengl
- unreal enigne
- 퀸 움직이기
- 초등부
- 언리얼 프로젝트 재생성 자동화
- 언리얼 프로젝트 재생성
- ndisplay
- 언리얼 자동화
- 브레젠험 알고리즘
- BOJ 2365
- 백준
- 정보올림피아드
- 테트리스
- Unreal Engine
- BOJ 27469
- 숫자판 만들기
- OpenVDB
- C++게임개발
- 백준 27469
- DP
- Codeforces
- Python
- UE5.3
- pygame
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |