Untitled

<aside> 💡 목차


</aside>

https://github.com/POCU/COMP1500CodeSamples

용어 & 자료형 크기 & 표현 범위 요약

형 변환

묵시적 변환 : 암묵적인 규칙을 의미함

→ 묵시적 변환?

<aside> 💡 컴파일러가 기본 자료형 간의 변환을 알아서 해주는것


int num1 = 10;
long num2 = num1;

</aside>

→ 정밀도 손실 Loss of Precision

<aside> 💡 데이터 손실 예시 코드 🔥

using System;

namespace PrimitiveTypesToBinary
{
    class Program
    {
        static void Main(string[] args)
        {
            int num1 = 1234567890;
            float num2 = num1;

            Console.WriteLine(num1 - (int)num2);
        }
    }
}

이게 만약 돈이라면, 1234567890 달러가 예금된 은행에서 float으로 형변환을 해버리면 46달러의 차이가 생겨버리겠지?

이게 만약 돈이라면, 1234567890 달러가 예금된 은행에서 float으로 형변환을 해버리면 46달러의 차이가 생겨버리겠지?

이런 이유로 int 로 표현 가능하다면 int로 표현하라! int로 표현하면 정밀도가 확실하게 보장되기 때문이다

‣ 다음 글에서 확인할 수 있듯이, 나눠지지 않는 값을 표현할때도 정밀도 손실에 의해 완전히 정확한 값이 나오진 않는다

</aside>

→ 승격 (Promotion)

<aside> 💡 그냥 int + float 하면 프로그램에서 float으로 자동으로 변환해주는것


double num1 = 3.7;
int num2 = 10;

Console.WriteLine(num1 + num2)
int num3 = 3;
int num4 = 2;
		
Console.WriteLine(num3 / num4);
int num3 = 3;
**float num4 = 2.0f;**

Console.WriteLine(num3 / num4);

</aside>

→ → 작은형에서 큰형으로 변환

<aside> 💡 32비트에서 64비트로 변환하는것은 문제 없다.


7FFF FFFF 를

0000 0000 7FFF FFFF 로

최상위 비트에 0을 붙이기만 하면 되는거니까!

Untitled

</aside>

→ → 큰형에서 작형으로 변환

<aside> 💡 64비트에서 32비트로 변환하는것은 문제가 있다!


0000 0001 FFFF FFFF 를

기존값이 32비트로 들어가기엔 값이 너무 커서 에러가 발생함!

또한, 작은형으로 변환되며 기존의 최상단 비트는 소멸되어 정보의 손실이 발생함

Untitled

</aside>