Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

วิธีดึง Hash Code ของ Int64 ใน C#

บทความนี้สาธิตวิธีการดึง hash code ของค่า Int64 (long) โดยใช้ method GetHashCode()

ตัวอย่างที่ 1: Hash Code ของเลขใหญ่สองค่า

using System;

public class Demo
{
    public static void Main()
    {
        long val1 = 8768768768;
        long val2 = 7889765555;

        Console.WriteLine("Value1 = " + val1);
        Console.WriteLine("Value2 = " + val2);
        Console.WriteLine("Are they equal? = " + val1.Equals(val2));
        Console.WriteLine("Value1 (HashCode) = " + val1.GetHashCode());
        Console.WriteLine("Value2 (HashCode) = " + val2.GetHashCode());
    }
}

ผลลัพธ์

Value1 = 8768768768
Value2 = 7889765555
Are they equal? = False
Value1 (HashCode) = 178834178
Value2 (HashCode) = -700169038

ตัวอย่างที่ 2: Hash Code ของ 0 และ Int64.MaxValue

using System;

public class Demo
{
    public static void Main()
    {
        long val1 = 0;
        long val2 = Int64.MaxValue;

        Console.WriteLine("Value1 = " + val1);
        Console.WriteLine("Value2 = " + val2);
        Console.WriteLine("Are they equal? = " + val1.Equals(val2));
        Console.WriteLine("Value1 (HashCode) = " + val1.GetHashCode());
        Console.WriteLine("Value2 (HashCode) = " + val2.GetHashCode());
    }
}

ผลลัพธ์

Value1 = 0
Value2 = 9223372036854775807
Are they equal? = False
Value1 (HashCode) = 0
Value2 (HashCode) = -2147483648

คำอธิบายเพิ่มเติม

  • Int64.GetHashCode() คืนค่า hash code 32-bit (int) ของค่า 64-bit
  • อัลกอริทึม: สำหรับ long ใช้ XOR ของ upper 32 bits และ lower 32 bits
  • ค่าที่เท่ากันจะได้ hash code เท่ากันเสมอ (แต่ hash code เท่ากันไม่ได้หมายความว่าค่าเท่ากัน - collision)
  • Hash code ใช้ใน hash-based collections เช่น Dictionary<TKey, TValue>, HashSet<T>
  • Equals() เปรียบเทียบค่าจริง (value equality) สำหรับ primitive types
  • Int64.MaxValue = 9,223,372,036,854,775,807 (2^63 - 1)