정수형 (integers)
문자
-char 1Byte
정수의 종류
- Short 2Byte
- int 2Byte(대부분 4Byte)
- long 4Byte
- long long *byte(C99/C++11 type)
컴파일러 스펙에 처리용량이 따라 달라질 수 있다.
int i = 1;
00000000 1Byte
00000000 1Byte
00000000 1Byte
00000001 1Byte
int형은 위처럼 4Byte로 구성 첫 한 비트는 부호에 사용된다.
주의할 점(OverFlow)
표현할 수 있는 숫자를 넘어가는 수가 들어오면 반대로 가장큰 수가 저장된다.
- 가장큰수를 넘어가면 가장작은수
- 가장 작은수를 넘어가면 가장큰수
#include <iostream>
#include <cmath>
#include <limits>
using namespace std;
int main()
{
short s = 32767;
int i = 1;
long l = 1;
long long ll = 1;
//2출력
//00000000 00000001
cout << sizeof(s) << endl;
//최대출력수 보기 32767
cout << pow(2, sizeof(short) * 8 - 1) - 1 << endl;
cout << numeric_limits::max() << endl;
cout << numeric_limits::min() << endl;
cout << numeric_limits::lowest() << endl;
s = s + 1;
//-32768이 출력된다.
//이 현상을 overflow라고 한다.
//2진수로 표현할 수 있는 숫자를 넘어가면 가장 작은 수로 변경된다.
cout << s << endl;
//2진수로 표현할 수 있는 가장 작은 숫자를 넘어가면 가장큰 수로 변경된다.
s = numeric_limits::min();
s = s - 1;
//32767이 출력된다.
cout << s << endl;
unsigned int i2 = -1;
//overflow가 발생하여 큰 숫자가 출력된다.
cout << i2 << endl;
//int형으로 저장한다.
int i3 = 22 / 4;
cout << i3 << endl;
//4출력
cout << sizeof(i) << endl;
//4출력
cout << sizeof(l) << endl;
//8출력
cout << sizeof(ll) << endl;
return 0;
}
C++ 11 고정 너비 정수
Fixed-width Integers
int 형이 플랫폼마다 byte사용량이 다를 수 있다.
불확실성이 있으면 프로그래밍에 불안이 된다.
이로인해 고정 너비 정수가 나오게되었다.
멀티플랫폼 프로그래밍때 사용된다.
cstdint를 include해서 사용한다
int16_t : 16bit 2byte로 변경한다.
int8_t : 8bit 1byte로 변경한다.
주의점 : 8bit는 char형태라 문자로 변경된다.
자세한것은 나중에 사용할때 알아보기로하자.
#include <iostream>
#include <cstdint>
int main()
{
using namespace std;
//2Byte로 변경
int16_t i(5);
//1Byte로 변경 char형태
//특별히 쓸일 아니면 쓰지말자
int8_t myInt = 65;
//A로 출력된다.
cout << myInt << endl;
return 0;
}
부동소수점수
floating point numbers
실수 다루기
실수는 정수보다 더 정밀한 숫자이다.
부동소수점수 종류
이름 float double Long double
최소크기 4Byte 8Byte 8Byte
전형적인크기 4Byte 8Byte 8,12 or 16Byte
최근에 나온 언어들은 double기본으로 사용하나
큰 메모리를 사용하는 프로젝트에선 float가 좋다.
1.0/3.0을 하면 0.3333333333333333333333333~~~이될텐데
0.333333으로 출력된다.
iomanip안에 setprecision을 사용하여 출력 숫자를 늘릴 수 있다.
숫자 무한대도 표현이 된다.
5.0/0.0 inf
-5.0/0.0 - -inf
0/0 -nan(ind)
로 출력된다.
cmath를 include해서 isnan,isinf함수로 확인을 할 수 있다.
주의할 점: 컴퓨터의 계산방법은 우리생각과 다를 수 있다.
#include <iostream>
#include <iomanip>
#include <limits>
int main()
{
using namespace std;
//3.14 == 31.4 * 0.1
//31.4e-1는 같다
//e는 십진수 e-1은 10의 -1제곱
float f(3.141592f);
double d(3.141592);
long double ld(3.141592);
cout << sizeof(float) << endl;
cout << sizeof(double) << endl;
cout << sizeof(long double) << endl;
cout << numeric_limits::min() << endl;
cout << numeric_limits::min() << endl;
cout << numeric_limits::min() << endl;
//iomanip로 출력 숫자를 정할 수 있다.
cout << 1.0 / 3.0 << endl;
cout << setprecision(16) << 1.0 / 3.0 << endl;
//출력할 수 있는 가장 가까운 수를 출력한다.
d = 0.1;
cout << d << endl;
cout << setprecision(17) << d << endl;
return 0;
}
'개발 소발 > 개발 C++(기초)' 카테고리의 다른 글
c++ 연산자종류 (0) | 2019.07.03 |
---|---|
c++ 문자형,리터럴상수,심볼릭상수 란? (0) | 2019.07.01 |
c++ namespace란? (0) | 2019.06.26 |
c++ 헤더파일 만드는 이유 (0) | 2019.06.26 |
c++ 키워드,식별자란? (0) | 2019.06.26 |