자료형
상황마다 다르겠지만 20억 이라는 수를 넘는 수를 다루는 상황이 은근 나옴
int의 최대값은 알아두는것도 좋을것 같다.
데이터 형식 범위
자세한 정보: 데이터 형식 범위
learn.microsoft.com
기본 제공 형식
기본 형식은 C++언어 표준에 의해 지정되며 컴파일러에 기본제공 되므로 헤더파일 은 없음
기본 제공형식은 정수, 부동 소수점 ,void의 세 가지 기본 범주
Void type
값이 없는 경우를 명시적으로 나타냄 보통 값을 반환하지 않는 함수
형식화되지 않거나 임의로 형식환된 제네릭 포인터를 선언하는데 사용
모든 식은 void형식으로 명시적으로 변환이나 캐스팅이가능
그러나 이런 식은 사용이 제한됨( 식 문, 쉼표현산지의 왼쪽 피연산자, 조건연산자(? :)의 두번쨰 또는 세번째 피 연산자)(더알아봐야겠다 기본 제공 형식(C++) | Microsoft Learn)
기본 제공 형식(C++)
자세한 정보: 기본 제공 형식(C++)
learn.microsoft.com
Character type 문자 형식
문자 형식은 문자 집합의 멤버를 효율적으로 인코딩하는 무자 표현 형식
char
char, signed char, unsigned char 형식의 변수를 서로 다른 형식으로 처리함
//별로안중요? 할까? 마이크로 소프트 컴파일러에서는 뭔가 char이 int로 승격된다고함 unsignd char도 기본적으론 unsigned int로 승격된다고함
wchar_t 도 기본제공 타입 wide-character or multibyte 킬틱터 타임 문자열이나 문자 앞에 L을 붙여주면 리터럴 값이
wide-character 타임으로 나타남
부울 형식
bool값 true false
bool의 크기는 보통 1바이트 이지만 구현에 따라 다릅니다? 기본 제공 형식(C++) | Microsoft Learn
컴파일러나 운영체제에 따라 달라지는듯 합니다 boolean - Is sizeof(bool) defined in the C++ language standard? - Stack Overflow
What does implementation-dependant mean? (cprogramming.com)
floating-point types 부동소수점 타입
부동소수점 타입은 IEEE-754 표준을 사용해 대충(정확도가 비교적 낮은) 넓은 범위를 표현할 수 있음
표준에 자료형의 크기자체는 제한이 없지만(컴파일러마다 다를 순있지만) 크기에 순서는 있다 (점점 커짐) float -> double -> long double 순으로 같거나 커진다
std::nullptr_t 키워드 nullptr은 모든 원시 포인터 형식으로 변환할 수 있는 형식 std::nullptr_t의 null포인터 상수 자세한 내용은 nullptr | Microsoft Learn
포인터는 값이 있는 메모리의 주소를 가르킴
운영체제마다 주소의 크기가 다를 수 있음
Integer type synonums동의어...
Built-in types (C++) | Microsoft Learn
- short, short int, signed short, signed short int
- unsigned short, unsigned short int
- int, signed, signed int
- unsigned, unsigned int
- long, long int, signed long, signed long int
- unsigned long, unsigned long int
- long long, long long int, signed long long, signed long long int
- unsigned long long, unsigned long long int
범위와 추가 정보들
정수형
char 1바이트 256가지 표현가능
wchar_t 2바이트
short 2바이트 65,536가지 표현가능,약6만
int 4바이트 4,294,967,296가지 표현 가능,약40억
long long 8바이트 18,446,744,073,709,551,616가지 표현 가능,약200경
표현가능한 수는 unsigned의 최댓값과 1차이남 0때문에
unsigned는 음수 표현을 포기하고 두배의 양수 크기를 가짐
(마이크로 소프트에서 보면 이외에 다른 자료형 이름도 많음)
int는 4바이트 43억 정도의 범위를 가짐 signed는 절반정도의 각 음수 양수를 표현 가능
양수는 음수보다 하나 적음 (2의 보수 덕분)
음수는 2의 보수를 통해 표현(0을 하나만가지고 덧셈 뺄셈이 쉬워짐)
실수형
float 4바이트 3.4E+/-38 7자릿수 정확도
double 8바이트 1.7E+/-308 15자릿수 정확도
long double 은 double과 같음
소수점 표현 가능
범위가 같은 바이트에비해 저엉말 넓다( 바이트의 크기가 더 커진게 아니므로 표현가능한 수가 늘어난것은 아닐것이다 )
하지만 모든 수를 표현하지 못하고 중간에 생략되는 수들이 있다
정확도에도 자연히 문제가 생긴다
실수의 표현
☕ 실수 표현(부동 소수점) 원리 한눈에 이해하기 (tistory.com)
고정소수점방식으로 계산후
노멀라이즈 한 가수부와 지수부를 표현
자바지만 글이 좋다 더 살펴봐야함
(컴퓨터는 4바이트 단위의 크기를 좋아한다고 설명을 들음 한번에 읽는 수와 관련이 있는것 같다)
[개념] 구조체 패딩 (Struct Padding) (tistory.com)
구조체, 클래스 어찌되었든 메모리 패딩은 CPU가 메모리를 읽어올떄 운영체제에 따라 4바이트, 8바이트의 크기를 읽어오기 때문에 생긴 개념이다. cpu에 최적화 하여 접근을 용이하게 구조체 자료형들을 배치시켜준다
(포인터 사이즈도 이런 이유에서 4바이트 8바이트 인 거일까?)
서로 다른 메모리 정의를 가진 시스템간 통신시 구조체의 값을 서로 읽는데 문제가 있을 수 있다.
#pragma (packpush,n) 을 이용해 패딩비트를 사용하지 못하게한다고하는데 이해가 잘 안된다
구조체를 만들때 dummy값 수동으로 패딩비트로 넣는다
아마 자동으로 컴파일러에서 패딩비트를 넣어주는것 같다
OS나 컴파일러에 따라 다르지만
int는 시스템의 기본 연산 단위를 사용한다. 16bit:2byte 32bit:4byte 64bit:4byte
64비트에서는 long이 8바이트로 확장된다. 16bit:4byte 32bit:4byte 64bit:8byte