C#에서 SByte는 8비트 크기의 부호 있는 정수(signed integer)를 나타내는 데이터 형식입니다. 흥미로운 점은 이러한 SByte 값을 별도의 형변환 연산자나 메서드 없이 Decimal 타입 변수에 바로 대입할 수 있다는 것입니다. 이처럼 컴파일러가 자동으로 처리해 주는 변환을 암시적 변환(Implicit Conversion)이라고 합니다.
SByte에서 Decimal로 변환하기
먼저 sbyte 변수에 값을 설정합니다.
sbyte val = 51;
그다음, sbyte 값을 decimal 변수에 그대로 할당하면 암시적 변환이 수행됩니다.
decimal d; d = val;
별도의 캐스팅 연산자 없이 단순히 값을 대입하기만 하면 되므로 코드가 매우 간결해집니다.
전체 예제 코드
using System;
public class Demo {
public static void Main() {
sbyte val = 39;
decimal d;
Console.WriteLine("8비트 부호 있는 정수(sbyte)에서 Decimal로의 암시적 변환");
d = val;
Console.WriteLine("Decimal = " + d);
}
}출력 결과
8비트 부호 있는 정수(sbyte)에서 Decimal로의 암시적 변환 Decimal = 39
암시적 변환이 가능한 이유
sbyte의 값 범위는 -128 ~ 127로 제한되어 있지만, decimal은 훨씬 넓은 범위와 높은 정밀도(28~29자리 유효 숫자)를 제공합니다. 따라서 sbyte의 모든 값을 decimal이 손실 없이 완전히 표현할 수 있으며, C# 컴파일러는 이러한 안전한 변환을 자동으로 허용합니다.
반대로 decimal을 sbyte로 변환할 때는 값 손실 가능성이 있으므로 명시적 캐스팅(explicit casting)이 필요합니다. 이 점을 기억해 두면 형변환 관련 오류를 예방하는 데 도움이 됩니다.