독개

#따배씨 2.2 정수형(Integers)

by #독개#

char도 정수형에 속한다

 

int 형이 플랫폼에 따라 최소로 잡아서 2byte로 잡는경우도 있다

 

보통은 4byte를 쓴다

 

 

(signed) int 가장 앞의 비트는 부호에 사용된다

양수면 첫번째 0

음수면 첫번째 1

 

unsigned int 부호가 필요없으므로 한비트를 숫자로 더쓸수있다

그런데 고작 이차이로 signed와 unsigend를 구분해서 쓰진말자 매우비효율적

 

오버플로우

#include <iostream>
#include <limits>

int main()
{
	using namespace std;
	cout << numeric_limits<short>::max() << endl; //short의 최대값
	cout << numeric_limits<short>::min() << endl; //short의 최소값
	cout << numeric_limits<int>::max() << endl; //int의 최대값
	cout << numeric_limits<int>::min() << endl; //int의 최소값
	//min과 lowest의 차이는 min은 최소의 절대값을 의미함 -255면 255를 나타내주고 lowest 는 -255를 다나타내준다
	cout << numeric_limits<int>::lowest() << endl; 

// short가 표현할수 있는 수는 2byte 이므로 -32768~32767까지다
	short s = 32767 + 1; // 32768이 나와야하는데 결과값은 -32768이 나온다 (오버플로우증상)
	short x = 32767 + 5; // 출력값 -32764
	short t = -32768 - 1; // -32769가 나와야하는데 32767이 나온다 (오버플로우증상)
	
	cout << "s : " << s << endl;
	cout << "x : " << x << endl;
	cout << "t : " << t << endl;
	

	unsigned num = -1; // 출력값 4294967295 (오버플로우증상)
	cout << num << endl;

	cout << 22 / 4 << endl; //출력값 5나옴 정수끼리의 연산은 정수로 표현함
	cout << (float)22 / 4 << endl; //출력값 5.5 하나라도 float값이면 float로 결과값 표현
	cout << 22 / (float)4 << endl; //출력값 5.5


}

 

중요한건 메모리공간의 값을 벗어나는 값이 들어오면 오버플로우 넘쳐흐른다 라는 사실을 알아야한다.

 

넘쳐흐르면 예상치못한 값이나온다

 

 

 

 

 

 


🐱‍👓독하게 개발

블로그의 정보

독한 개발자

#독개#

활동하기