본문 바로가기
  • 공부, 여행 리뷰해요~~!!
공부/C++

C++ Integer, 정수 최대 최소 및 크기

by 하나리나 2024. 4. 12.
반응형

패스트캠퍼스 C++ 실력 완성 올인원 패키지 Online 수강 내용 중, 공부한 내용을 올립니다.

(강추입니다..)

 

1. 정수형 표현 방법

 - 정수 선언 방식에 따라 10진수, 8진수, 2진수, 16진수 형태의 정수를 선언할 수 있다.

	int num0 = 11;   // 10진수
	int num1 = 011;  // 8진수
	int num2 = 0b11; // 2진수 (binary)
	int num3 = 0x11; // 16진수 (Hex)

 

 

2. 정수의 크기

 - 일반적으로 integer는 32bit이다. (4바이트)

 - 개발환경에 따라 변수의 size가 달라질 수 있다.

	int intNum = 0;
	long longNum = 0;
	int* intPointer = &intNum;

	cout << sizeof(intNum) << endl;      // 4byte?
	cout << sizeof(longNum) << endl;     // 4byte?
	cout << sizeof(intPointer) << endl;  // 4byte?

 

 - 변수의 길이가 중요할 때에는 변수 크기도 함께 정의해야 하는 것이 좋다. (Fixed width integer)

	int8_t int_size_check0 = 0;
	int16_t int_size_check1 = 0;
	int32_t int_size_check2 = 0;

	cout << sizeof(int_size_check0) << endl;  // 1byte
	cout << sizeof(int_size_check1) << endl;  // 2byte
	cout << sizeof(int_size_check2) << endl;  // 4byte

 

 

3. 자료의 크기

 

3.1. Unsigned integer

 - 8bit maximum = 255 = 2^(8) - 1 = (binary) 1111 1111

 - 16bit maximum = 65535 = 2^(16) -1 = (binary) 1111 1111 1111 1111

	cout << (int)numeric_limits<uint8_t>::max() << endl;
	cout << numeric_limits<uint16_t>::max() << endl;

 

3.1. Signed integer

 - 음수의 경우 2의 보수를 활용 (Twos compleent)

   음수 즉, 첫번째 자리가 1인 경우, Binary 양수에서 2의 보수를 취한 값을 음수로 취하면 됨.

 - 8 bit maximum = 127 = 2^(7) - 1 , (b) 0111 1111

 - 16bit maximum = 32767 = 2^(15) - 1, (b) 0111 1111 1111 1111

	cout << (int)numeric_limits<int8_t>::max() << endl;
	cout << numeric_limits<int16_t>::max() << endl;

 

 - 8 bit minimum = -128 , (b) 1000 0000 => 2의 보수 => (0111 1111) + 1 => 1000 0000 ==> -128

 - 16 bit minimum = -32768

	cout << (int)numeric_limits<int8_t>::min() << endl;
	cout << numeric_limits<int16_t>::min() << endl;

 

 

4. Overflow & Underflow

 - 최대/최소로 담을 수 있는 bit를 넘어가버림

 - Unsigned / Signed 에 따라 달라짐.

	// Overflow
	uint32_t num32 = numeric_limits<uint32_t>::max();
	uint32_t num32_1= num32 + 1;
	cout << "Overflow test" << endl;
	cout << num32 << endl; 
	cout << num32_1 << endl;

	// Underflow
	uint32_t num32_min = numeric_limits<uint32_t>::min();
	uint32_t num32_min_1 = num32_min - 1;
	cout << "Underflow test" << endl;
	cout << num32_min << endl;
	cout << num32_min_1 << endl;

 

반응형