- 구조체
배열에 여러 데이터형을 넣고 싶다 -> 구조체
각 항목을 멤버
구조체 태그를 식별자로 사용가능
태그를 생략할 수 있는데 태그가 없으니 변수를 생성할 수 없다, 그렇기에 변수 정의와 함께 사용
멤버들이 저장되는 메모리크기는 가장 큰 자료형의 크기로 저장됨
이러한게 많이 비효율적이라 생각이 들면 비트필드 이용
지정한 비트만큼만 데이터가 저장된다 ( 컴파일러에 따라 다르지만 VsC++에서는 정수형 & bool형 으로만 사용가능 )
Signed 일경우 맨 앞자리는 부호비트로보고 나머지를 계산
ex)
1) b에 13를 넣는다
2) 13 = 1101 (이진수)
3) b는 3비트만 사용하여 "101"로 데이터가 잘림
4) 맨앞은 부호비트로 채용, 음수가 됨
5) 나머지 데이터 "01"이 음수이므로 음수형으로 2의 보수를 취한다 [ 십진수를 음수 이진수로 표현 2의 보수 취하기]
6) 그럼 "10" 이 되므로 3이다
6) 최종적으로 -3 데이터 가 들어가있는게 된다
unsigned는 부호비트가 없으므로 어디서 잘리는지만 보면 된다
ex)
1) c에 5를 넣는다
2) c = 101 (이진수)
3) c는 2비트만 사용하여 "01" 로 잘림
4) 최종적으로 1저장
※ 구조체와 클래스 차이 공부 필요
- 공용체 (Union)
가장 큰 변수의 메모리를 모든 변수가 공유함
이런식으로 const도 바꿀수있나보다
- 열거형
상수형에 이름붙인 나열된 자료형
경험상 어떠한 카테고리안의 항목을 다룰 때 편한거 같다
예를들어 플레이어의 상태 카테고리라면
태그명(위에서 State)는 변수를 만들지 않을거면 사용하지 않아도 된다 , 상수값 중복가능
데이터형이 Enum형일수도있고 int형으로 될수도있다 그렇기에 산술연산이 가능한데
산술연산 가능은 컴파일러마다 다르다 (하지만 이식성을 위해 쓰지말자), 대입연산과 비교연산 가능
따로 초기화 해주지 않는 이상 계속 0부터 1씩 증가되어 값이 대입된다
[ 중간에 딱 한값만 100으로 넣어도 그뒤에는 101, 102 .... 이런식이다 ]
변수에 값 대입시에 무조건 해당 Enum에 정의된 열거자(식별자)를 넣어줘야하는데
ex) playerState = Idle;
명시적인 데이터형 변환을 사용하면 가능하다
ex) playerState = State(99) // "99"라는 int형을 State형으로 강제 형변환
저렇게 99라는 없는 상수도 넣을수 있는데 최대값 범위가 공식으로 있다고 하는데 사실 잘 모르겠다 해봤는데
그 공식에서 나온 값을 넘어서도 출력이 잘 된다
추가+
enum은 몇가지 정수형에 의해 표현되는데
C++98 이하 버전에서는 실행하는 방식에 따라 달랐지만 C++11이후로 선택할수있는 문법이 생겼다
'C++ > [책] C++ 기초 플러스' 카테고리의 다른 글
[ 203p ~ 209p ] 문자열 상수 (0) | 2021.06.30 |
---|---|
[ 179p ~ 203p ] 포인터, NULL&nullptr, New, Delete, 배열 포인터 (0) | 2021.06.28 |
[ 130p ~ 160p ] 배열, 문자열, string, raw문자열 (0) | 2021.06.01 |
[ 70p ~ 130p ] 식별자 규칙, 정수&실수, 멤버 연산자, const, static_cast, auto (0) | 2021.05.31 |
[0 ~ 70] 전처리기 , name space , 함수 선언 , 예약어/키워드 (0) | 2021.05.29 |