• 구조체

배열에 여러 데이터형을 넣고 싶다 -> 구조체

 

각 항목을 멤버

 

구조체 태그를 식별자로 사용가능

 

태그를 생략할 수 있는데 태그가 없으니 변수를 생성할 수 없다, 그렇기에 변수 정의와 함께 사용

앞으로 MyStruct밖에 사용 불가

 

멤버들이 저장되는 메모리크기는 가장 큰 자료형의 크기로 저장됨

 

이러한게 많이 비효율적이라 생각이 들면 비트필드 이용

 

지정한 비트만큼만 데이터가 저장된다 ( 컴파일러에 따라 다르지만 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이후로 선택할수있는 문법이 생겼다

+ Recent posts