개탕 IT FACTORY

C# 데이터형식과 타입(2) 본문

프로그래밍/c# 프로그래밍

C# 데이터형식과 타입(2)

rendar02 2018. 3. 30. 19:58
반응형

저번에 숫자형 데이터 형식을 배웠습니다 오늘은 부동소수점 데이터 형식을 배워보도록하겠습니다 




부동 소수점 


백과사전을 찾아보니 


소수점의 위치를 고정하지 않고 그 위치를 나타내는 수를 따로 적는 것으로


?이런식으로 정의 되어있습니다.


그럼 여기서 의문점이 

"왜? 소수점을 가만히 놔두지 않나요?" 라고 하실수 있는데 바로 제한된 비트를 이용해 횔씬 넓은 범위를 표현하기 위해서 입니다 



일단 그럼 생각드시는게 오 그럼 숫자형 데이터 안쓰고 부동소수점만 쓰면되는거 아닌가요? 라고 하실수 있습니다 



일단 부동소수점형식은 정수형을 대체할수 없습니다 그이유는


1. 부동소수점 형식은 소수점을 표한하기위해 일부 비트를 사용하기때문에 정수계열과 같은 값을 표현할수 없음


2. 부동소수점은 정수형식에 비해 형식이 복잡해 연산과정이 느림 



일단 부동소수점의 데이터 형식들을 보시죠 


 데이터 형식

설명 

크기(바이트 )

 범위

 float 

  단일 정밀도 부동 소수점

  4(32비트)

 -3.492823e38 ~ 3.402823e38

 double 

  복수 정밀도 부동 소수점

  8(64비트)

  -1.79769313486232e308 ~ 1.79769313486232e308

 decimal 

  29자리 데이터를 표현 할수 있는 형식

  16(128비트)

  +-1.0 x 10e-28 ~ +-7.9 x 10e28





제가 범위에 e38,e308 이런거에 검은색으로 강조 하였죠 이유는 이것에 대해 궁금해 하실까해서 입니다 아실분은 아시겠지만 


e는 10이라는것을 나타내는것이고 38은 38승을 뜻합니다 쉽게 10의 38제곱수라는것입니다 




일단 단일과 복수가 있는데 차이가 뭐냐고 말하시면 


만약 원주율을 계속해서 나열하는 프로그램을 개발한다그러면 


3.14159265358979323846264338327950288....... 이렇게 계속 가겠죠 




그런데 float로 표현할시 3.141593 이렇게 대략적으로 표현이 됩니다 하지만 double의 경우 3.14159265358979 표현됩니다 




어라..... 복수 정밀도라해서 다 표현이 되지 않네요 네.. 그렇습니다 전부 표시 되지 않습니다 


자신의 가수부가 담을 수 있는 부분까지만 담고 그외는 버렸기 떄문에 그렇습니다.


그럼 decimal은 어떨까요?


3.1415926535897932384626433833 이렇게 표현됩니다 어라 ... 이것도 마찬가지네요? 


네 그렇기 때문에 부동소수점을 넘어서는 프로그램을 제작할시에는 직접 데이터를 처리하는 알고리즘을 담은 복합데이터형식을 작성해야됩니다 


-문자와 문자열 형식-


자 이제 숫자형 데이터타입은 다 배웠으니 문자형식과 문자열형식에 대해서 배워볼까요?


데이터 형식 1편에서 나왔듯이 char는 유니코드 형식 입니다


어라 유니코드가 먼가요? 


이것에 대한 질문에 답을 할려면 컴퓨터 역사로 넘어가야 됩니다 컴퓨터를 만든 나라가 어디죠? 바로 미국입니다 그래서 

이컴퓨터가 사람의 고급언어를 컴퓨터가 이해하는 저급언어로 변환시켜주는 컴파일러를 만듭니다 


당연히 미국에서 제작했으니 언어도 영어로 만들었겠죠 그래서 미국은 이것을 표준으로 만듭니다 그게 바로 

아스키(ASCII)코드 입니다 그런데 문제가 생기는게 점차 컴퓨터 보급이 활발해지면서 각종 다양한 국가에서 사용합니다 


그런데 현재 컴퓨터가 인식하고 보여지는것(인코딩)은 영어 밖에 없었죠 당연히 다른나라에서 쓰이는 언어는 깨져보이던가 아니면 아예 출력조차 안되겠죠


이렇게 해서 만들어 진게 유니코드입니다 각종 나라의 다양한 언어,문자를 인코딩하기위한 것이죠 

사실 이것에대해선 데이터 타입등 여러가지를 설명해야하는데 쉽게 설명하고자 이렇게 말하였습니다 


http://whatisthenext.tistory.com/103 이곳에 아스키와 유니코드의 설명이 쉽게 되어있으니 참고 바랍니다 


자 그럼 이제 본론으로 넘어가서 char형식은 하나의 문자 데이터만 담을수 있는 그릇입니다 


당연히 숫자가아닌 문자만 가져옵니다 쉽게 '가', '나' '다', 'a','b','c' 같은 문자만 오지요 


아니 그러면 숫자도 들어갈수 있는것 아닌가요? 라고 하실텐데 

문자만 가져오니 당연히 작은 따옴표(')가 있는 데이터만 입력됩니다 1 ≠'1' 인것과 동일합니다 


프로그래밍할때 한개의 단어만 쓰는것도 아닌데 여러개를 쓸땐 어떻게 해야되나요? 

당연히 있습니다 바로 string 형식인데 이것은 쉽게 


char 형식 여러개를 줄에 하나에 매달아 놓는 형식이라고 생각하시면 됩니다 




이런식으로 됩니다 쉽게 안에는 char 형식 그걸 묶는 걸 string 형식입니다 


string은 char와 다르게 큰따옴표(")로 씁니다 쉽게 "안녕하세요" ,"반갑습니다" 와같이 쓸수 있는거죠  


선언 해주실때에는 string 변수명 = "본인이 쓰고싶은말" 이렇게 하시면됩니다 


그다음은 논리형식이있습니다 논리형식은 쉽습니다 참(true) 아니면 거짓(false)뿐입니다.


정말 어이가 없을수 있습니다 아니 왜 참과 거짓도 존재하는것이지? 

사실 논리형식은 프로그래밍 하면서 어마무시하게 쓰여질것입니다 그러므로 알아 두세요 


object 형식이 있습니다 이 형식은 쉽게 모든 데이터 타입을 다 다룰수 있습니다

으잉? 아니 어떻게 이런게 가능한거죠? 라고 하실수 있으실텐데 바로 나중에 다룰테지만 상속이라는것이 있기때문이죠 

객체지향의 정말 위대한 기능중에 하나죠 


어차피 object는 모든 데이터타입의 부모 클래스이기때문에 자식들(지금까지 나왔던 데이터타입)을 모두 쓸수있죠 

왜? 자식들은 부모에게서 물려받은 DNA가 있기 때문이죠 


이와 비슷한게 var라는 데이터 형식이 있습니다 이것은 c#의 컴파일러의 약한 형식검사를 통해 지정해주는것입니다 

(강한형식검사는 개발자가 정수를 담는 변수에 문자열을 담을때 막아주는 역활을합니다) 

하지만 var는 그저 컴파일러의 검사의 편리성(?)을 통해하는거라 var의 경우 선언과 초기화를 동시에 해야됩니다 


쉽게 보통은 

          string a;                                     string a = "안녕하세요"

            a="안녕하세요"   이렇게 해도 되고                              이렇게 해도됩니다.

하지만 var는 object 처럼 상속도 아니고 그저 컴파일러를 속이는 것이라 

선언과 초기화를 동시에 해야됩니다 

var a = "안녕하세요"  이렇게 말이죠


원래는 다루어야되는데 박싱과 언박싱, 형변환 등은 나중에 추후에 다시 게시하겠습니다 

http://grayt.tistory.com/87 - 박싱과 언박싱

http://guslabview.tistory.com/68 - 형변환


일단 두 곳을 참조하고 추후에 다시 설명해드리겠습니다 

반응형