operator01.jpg


안녕하세요? LGS 입니다.
오늘은 MATLAB의 Data Type에 대해 이야기할까 합니다.
사실 이번 강의는 몰라도 되지만 알아두면 피가 되고 살이 되는 이야기입니다. ^^

8m_QPyb5Wcd0HPQVKiciUau9xWiQcQyS3zoWmhyGsawEDIMUBrtNnULz6op07QKuPHPXQ1stJlwaRxkS41oS4J-rV0e2xciOvseUsjZze_uU8NUxZK8

위의 그림을 보시고 MATLAB의 대략적인 Data Type을 익혀둡시다.
우선 Command Window에서 아래의 수식을 입력합니다.(copy & paste하세요)

Logical = 1>0;
Character = 'Hello';
Numeric = [1 2 ; 3 4];
Cell = {[1 2] , [1 2 3], 'Hello'};
Structure.a = 1;

HkyA-jpedCONH8722pZ-VfzXa-I9PZdr9UIYjlv6QOVPlhbzEE4WPB8aOVEhcYB9l1MTaMsgQIiQLeI9cVOEv1nBsxZzl-imgyeBpBb81dwyvDSyNSk

자 Workspace에 새로운 변수들이 생겼습니다.
여러분이 주목해야할 것은 각 변수들 앞의 노랑색 아이콘입니다. 아이콘 모양이 모두 다르죠? 
저 노랑색 아이콘들은 변수의 Data Type을 말해줍니다.
이제부터 하나씩 풀어나가도록 하죠~
이때까지 여러분들은 2차원 평면 Matrix를 주로 다루셨습니다. magic이나 pascal 함수를 떠올려 보세요. 
MATLAB은 평면 행렬 이외에 다양한 변수형(Data Type)을 제공합니다.

Data Type을 말하기 전에 우선 알아 두어야 할 것이 있습니다.
그것은 바로바로바로 Bit(비트)와 Byte(바이트)입니다.
컴퓨터는 아날로그가 아니라 디지탈입니다. 아날로그는 0.3452이런 값도 가능하지만 
디지탈이 처리할 수 있는 것은 0과 1 뿐입니다. 전기가 흐르면 1, 흐르지 않으면 0 이런 식이죠. 

001voepOMJY93Zz6jf_dwHnSUFLbsn-C28oEt-C3ZWJjPAaDugLAj6-qylNeTTJBDjaTfRqq05JPk73NCuHJN-PKCTMUcqsMhU7gsi9Tk9Pv65bJCSY

컴퓨터에는 가상의 방이 수없이 많이 존재합니다. 
메모리가 되었든 하드디스크가 되었든 모두 비트(0과 1)를 저장할 수 있는 방을 가지고 있습니다.  
저 네모칸(방) 딱 하나가 1 비트라고 해봅시다. 저 네모칸에 들어 갈 수 있는 숫자는 0과 1뿐이라는 말이죠. 
0과 1밖에 못들어 간다고 그랬는데 어떻게 132 같은 숫자를 표현할 수 있을까요? 
컴퓨터에서는 0과 1밖에 담을 수 없는 비트를 쭉 이어 붙여서 132같은 숫자를 표현합니다. 
또 뭘 정하기 좋아하시는 우리 개발자분들이 8 비트를 1 바이트로 부르기 시작했다는 말씀.

kPzcv8k2qXLzZ2a3v4O1hMbm_Q03levsWBbORXWMGxBFN8aWDOoqcOE3HW4agkgLSNwL91HN7aJ4_opkubhdK6OrkasuFGk3FaFIO5AY3vG-OeSqxfQ

1 비트로 표현할 수 있는 숫자의 개수는 몇개일까요? 예 당연히 2개입니다. 0과 1뿐입니다.  
그럼 2비트가 표현 할 수 있는 숫자의 개수는? 각 비트에 0과 1을 채워 넣어 보세요. 
2비트로 표현 할 수 있는 수의 총 가지수는 4가지 입니다. 3비트는? 역시 해보시면 8가지 임을 아실 수 있습니다. 
어라?? 그러고 보니 2의 승수이군요.
그럼 1 바이트(8 비트)가 표현 할 수 있는 숫자의 가지 수는? 네 잘하셔습니다.
 2의 8승(2^8 = 256)가지를 (0부터~255까지) 표현 할 수 있습니다.
이해되시죠? 그럼 본격적으로 Data Type을 알아 봅시다.

logical Type은 참 또는 거짓의 정보를 저장합니다. 참(True)이면 1, 거짓(False)이면 0. 1 비트만 필요하겠죠? 
그러나 우리의 MATLAB은 1 바이트(8비트)를 먹습니다 -_-;;
Command Window에서 >>whos 를 쳐보세요. 
Workspace에 어떤 변수들이 있고 각 변수들의 Type과 크기를 알수 있습니다. 
logical이 1 바이트를 먹고 있다는 것을 보실 수 있을 겁니다.

문자를 표현하는 Character(캐릭터) 형은 2바이트를 사용합니다. 
표준으로 서로 미리 약속을 하고 각각의 숫자마다 문자를 하나씩 대입시켜 놓았습니다. 
예를 들어 65번은 대문자 A라는 식이죠.(Unicode를 참조하세요)

>>char(65)
ans =
A

캐릭터형 자료를 입력할 때는 작은 따음표를 쳐줍니다.
>>b='a'

캐릭터형 변수가 벡터를 이루면 어떻게 될까요? 바로 문자열(String)이 됩니다.
>>Character='Hello'
F1GYGxQPbPNznJF3tx8mwACa_2eJ7oNsaTmnNXBw8bUyyJyeT4nKxsrwwPvgAbE7cCJCFpSL3KaGAH8_oJrkHdjX13FB_DNIjAFGKSrseNFnxJoEuxk

즉 위의 Character라는 변수는 크기가 1x5인 row vector입니다.
>>uint8(Character)
ans=
     72   101   108   108   111

각각의 문자에 해당되는 숫자를 볼 수 있습니다.  

이번에는 Numetic 형에 대해서 알아봅시다.
가장 간단한 부호가 없는 8비트 정수형 부터...
부호가 없는(Unsigned) 8 비트 정수형(Integer)의 표현 범위는 어떻게 될까요?
위의 강의를 잘 따라 오셨다면 딱 보고 바로 답이 나오실 겁니다. (정답은 0부터~255까지)
부호가 없는 16비트는? 0부터 ~ 2^16-1 까지입니다. 쉽게 이해가 갑니다.(-1을 한것은 0을 포함했기 때문입니다)

GlbKYbol2MVmLrqzqQILrSti6S12f8b2MCMqNilldIemasFOU_ua_rVfFjYO7IEsfGXXB3KedrV-PHMJRsAMDty4ZvebOnefp0Hxh246FJ8XxLnyIwY

그런데 사람은 빵만으로 살수 없듯이(고기도 가끔 먹어줘야 됩니다 ^^) 양수만 사용할 수는 없습니다. 
음수를 표현할 방법이 절실하게 필요했다 이겁니다. 
그래서 플러스, 마이너스를 표현하는 부호비트를 도입하게 됩니다. 맨 앞의 비트를 부호비트로 사용기로 약속한 거죠. 
부호비트가 0이면 플러스, 1이면 마이너스 이런 식입니다.(2의 보수도 살짝 패스)
그럼 부호가있는(Signed) 8비트 정수형(Integer)의 표현범위는? 위의 그림을 다시봅시다.
부호비트로 1비트가 날아갔으므로 표현범위는 (-2^7 = -128) 부터 (2^7-1 = 127)까지 겠죠? 
밑의 표가 이해가 가시나요?

-pZKTOqA3XPmgiUBNUiEy005AD4C3JDz0PsbA8XceRzVJDtFk9uKednKb3AtRLvB0JL6o8viBSyVc8jfF7IftCQC1D7iPggbz9VPMm5LiockD87ctr0

MATLAB에서는 기본적으로 Double형으로 데이터를 저장합니다. 
컴퓨터 마다 다르지만 Double형은 보통 8바이트(64비트)를 사용합니다. Single형은 4바이트(32비트)를 사용합니다. 
(참고로 32비트 컴퓨터라는 말은 컴퓨터가 한번에 32비트(4바이트)를 처리할 수 있다는 의미입니다) 
이 Double 형과 Single형은 소수점을 표현할 수 있습니다. 둘은 정밀도에서만 차이가 납니다. 
당연히 Data의 크기가 큰 Double형이 더 정밀한 숫자를 표현할 수 있습니다.
우선 Single형이 123.4를 어떻게 표현하는지 보죠.

123.4 = 1.234 *100 = 1.234 * 10^2 = +1.234e2

8jmTM6lyRGMyWQgnWMr9TQN69m6KzdvgH9a9-h3h8td_vSTep-G4-oZxUZw4aFwNXilroQpimYTilrtRA65aREQxwibFlx8KoJOWwYsmyF_X6K_gsmE

세부적으로는 좀 다르지만 위와 같이 이해하셔도 별 무리가 없습니다.
http://www.tipssoft.com/bulletin/tb.php/FAQ/177 <- 잘 설명되어 있으니 참고하시기 바랍니다.

Double 형은 정밀도에서만 차이가 납니다. 아래 표를 참고하세요

GE6CaaStYfB7SKCpHTBtGWcc2WT4unpRAseJftDzU5XzmxjNVzVxwsrVCV8mwv_vMwi8EAXa5CLn6w3zXInJ142ZhfuJpQ1WSuukevsCBSE0T8ojGa0



오늘은 여기까지 입니다. 좀 까다로운 부분이 많았는데 잘 따라오셨는지??
강의가 너무 길어져서 2부분으로 끊었습니다.
다음시간에 Cell, Struct등을 알아보겠습니다.
그럼 이만. 총총총....


P.S. 

Data Type 1부 보충 강의 Update 되었습니다.

http://www.matlabinuse.com/10359

profile