1-2 데이터 (형변환)

omniAI·2022년 4월 26일

C#

목록 보기
2/14
post-thumbnail

💁 데이터종류

ㄱ. Boolean


true, false 판별하는데 1bit만 필요하지만
boolean 타입이 1byte크기인 이유는,
컴퓨터는 1byte 단위로 일을 하기 때문에 맞춰 준 것 뿐이다.

  • True -> 00000001
  • False -> 00000000

ㄴ. float

  • 실수의 연산은 정수 연산보다 비싸다.
  • 실수는 딱 떨어지게 표현되기 힘들다. 컴퓨터가 온갖 이진수의 조합으로 최대한 근접하게 그 실수를 표현한 것일 뿐이기 때문이다.
  • float -> 4byte
    • 7자리 정도까지 정밀
    • 소수단위까지 정밀하게 판정할 필요가 없는 게임 정도는 float만 해도 충분하다.
  • double -> 8byte
    • 15자리 정도까지 정밀
    • float보다 더 정밀하지만 메모리를 두배 더 차지한다.

ㄷ. 형변환

1. 바구니 크기가 다른 경우

8byte 바구니(long)에 4byte(int)를 넣는 것은 데이터가 손실될 일이 없으므로 가능하다. 큰 바구니에 작은 물건을 넣는 것은 문제가 없다!

4byte 크기인 a데이터를 2byte인 s1에 담으려고 하니 에러가 발생한다. 작은 바구니에 큰 물건을 담을 수 없다.. 만약에 강제 형변환으로 구겨 넣으려 한다면? 데이터 손실 문제가 발생..!


2. 바구니는 같으나 부호가 다른 경우

  • byte 8byte. (0~255) 범위만 표현 가능
  • sbyte 8byte. (-128~127) 범위만 표현 가능
    bytesbyte는 크기가 같지만, 범위가 다르기 때문에 255를 sbyte에선 제대로 표현할 수가 없다. 255를 sbyte에 강제적으로 담으면 붐위를 넘어서 다시 최소 범위로 순환하게 되버리기 때문에 underflow가 일어나 -1이 된다.


    3. 소수 변환
    컴퓨터는 이진수들의 합으로 해당 실수와 최대한 인접한 값을 표현한다.
    그래서 실수 데이터인 float과 double에 정밀도라는 용어가 근접하는 것이다.

    3.141400980652 -> 3.14를 표현하기 위한 컴퓨터의 노력... float에선 3.1414000 였겠지만 이것도 사실 정밀하게 딱 떨어지는 3.14는 아니다. 4byte라는 한정된 크기에 의해 3.1414000 까지만 담긴 것 뿐.
    🎲 따라서 소수끼리의 비교는 == 을 쓰면 안된다!
    어느 정도 오차가 나면 두 소수가 같다고 볼지식으로 비교해야 한다.
profile
킵러닝

0개의 댓글