Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# UInt64 구조체 완벽 가이드: 64비트 부호 없는 정수의 이해와 활용

C#의 UInt64 구조체는 64비트 부호 없는 정수(unsigned integer)를 나타내는 값 형식입니다. 표현할 수 있는 값의 범위는 최솟값 0부터 최댓값 18,446,744,073,709,551,615까지로, 음수를 저장하지 않는 대신 Int64보다 두 배 넓은 양수 범위를 제공합니다.

이번 글에서는 UInt64 구조체가 제공하는 대표적인 메서드인 CompareTo()Equals()를 예제와 함께 자세히 살펴보겠습니다.

UInt64.CompareTo() 메서드

UInt64.CompareTo() 메서드는 현재 인스턴스와 지정된 객체 또는 다른 UInt64 값을 비교하여 상대적인 크기를 나타내는 정수를 반환합니다.

구문 (Syntax)

public int CompareTo (object val);
public int CompareTo (ulong val);

첫 번째 구문은 비교 대상이 되는 객체(object)를 매개변수로 받고, 두 번째 구문은 비교할 부호 없는 정수(ulong)를 매개변수로 받습니다.

반환값은 다음과 같습니다.

  • 0: 현재 인스턴스가 비교 대상과 같은 경우
  • 0 미만(음수): 현재 인스턴스가 비교 대상보다 작은 경우
  • 0 초과(양수): 현재 인스턴스가 비교 대상보다 큰 경우

예제 1: ulong 값 비교

두 개의 ulong 변수를 CompareTo() 메서드로 비교하는 예제입니다.

using System;
public class Demo {
    public static void Main(){
        ulong val1 = 257876;
        ulong val2 = 5657655;
        int res = val1.CompareTo(val2);
        Console.WriteLine("Return value (comparison) = "+res);
        if (res > 0)
            Console.WriteLine("val1 > val2");
        else if (res < 0)
            Console.WriteLine("val1 < val2");
        else
            Console.WriteLine("val=val2");
    }
}

출력 결과

Return value (comparison) = -1
val1 < val2

val1(257876)이 val2(5657655)보다 작으므로 -1이 반환되고, "val1 < val2"가 출력됩니다.

예제 2: object 타입과 비교

CompareTo() 메서드는 object 타입의 매개변수도 받을 수 있습니다. 박싱(boxing)된 ulong 값을 비교하는 예제를 살펴보겠습니다.

using System;
public class Demo {
    public static void Main(){
        ulong val1 = 258768768;
        object val2 = (ulong)1765765;
        int res = val1.CompareTo(val2);
        Console.WriteLine("Return value (comparison) = "+res);
        if (res > 0)
            Console.WriteLine("val1 > val2");
        else if (res < 0)
            Console.WriteLine("val1 < val2");
        else
            Console.WriteLine("val=val2");
    }
}

출력 결과

Return value (comparison) = 1
val1 > val2

val1(258768768)이 val2(1765765)보다 크므로 1이 반환되고, "val1 > val2"가 출력됩니다.

UInt64.Equals() 메서드

UInt64.Equals() 메서드는 현재 인스턴스가 지정된 객체 또는 UInt64 값과 같은지 여부를 나타내는 불리언(Boolean) 값을 반환합니다.

구문 (Syntax)

public override bool Equals (object ob);
public bool Equals (ulong ob);

첫 번째 구문의 매개변수 ob는 현재 인스턴스와 비교할 객체이며, 두 번째 구문의 ob는 현재 인스턴스와 비교할 64비트 부호 없는 정수입니다.

예제 1: 서로 다른 값 비교

값이 다른 두 변수를 Equals() 메서드로 비교하면 false가 반환됩니다.

using System;
public class Demo {
    public static void Main(){
        ulong val1 = 44565777;
        ulong val2 = 77878787;
        bool res = val1.Equals(val2);
        Console.WriteLine("Return value (comparison) = "+res);
        if (res)
            Console.WriteLine("val1 = val2");
        else
            Console.WriteLine("val1 != val2");
    }
}

출력 결과

Return value (comparison) = False
val1 != val2

예제 2: 동일한 값 비교

값이 동일한 두 변수를 비교하면 true가 반환됩니다.

using System;
public class Demo {
    public static void Main(){
        ulong val1 = 78796878;
        ulong val2 = 78796878;
        bool res = val1.Equals(val2);
        Console.WriteLine("Return value (comparison) = "+res);
        if (res)
            Console.WriteLine("val1 = val2");
        else
            Console.WriteLine("val1 != val2");
    }
}

출력 결과

Return value (comparison) = True
val1 = val2

정리

UInt64 구조체는 0부터 약 1844경(18,446,744,073,709,551,615)까지의 부호 없는 정수를 처리할 때 유용합니다. 특히 파일 크기, 메모리 주소, 대규모 카운터 등 음수가 필요 없는 시나리오에 적합합니다.

  • CompareTo(): 두 값의 크기를 비교하여 -1, 0, 1 형태의 정수를 반환하며, 정렬 로직에 활용하기 좋습니다.
  • Equals(): 두 값이 같은지 여부를 true/false로 반환하며, 값 동등성 검사에 사용됩니다.

단, UInt64는 CLS(공용 언어 사양) 규격이 아니므로 다른 .NET 언어와의 상호 운용성이 중요한 라이브러리 설계 시에는 사용 여부를 신중히 고려해야 합니다.