정수형 (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

+ Recent posts