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

ชนิดข้อมูล ulong ใน C#: จำนวนเต็มไม่มีเครื่องหมาย 64 บิต

ulong (ย่อมาจาก unsigned long) เป็นนามแฝง (alias) ของ System.UInt64 แทนจำนวนเต็มไม่มีเครื่องหมาย (unsigned integer) ขนาด 64 บิต รองรับค่าตั้งแต่ 0 ถึง 18,446,744,073,709,551,615

ขอบเขตค่า

ค่าคงที่ค่าคำอธิบาย
ulong.MinValue0ค่าต่ำสุด
ulong.MaxValue18,446,744,073,709,551,615ค่าสูงสุด (2^64 - 1)

โค้ดตัวอย่างสมบูรณ์

using System;

public class Demo
{
    public static void Main()
    {
        ulong val = 7712059531;
        
        Console.WriteLine($"ค่าตัวอย่าง: {val}");
        Console.WriteLine($"ค่าต่ำสุด (MinValue): {ulong.MinValue}");
        Console.WriteLine($"ค่าสูงสุด (MaxValue): {ulong.MaxValue}");
        Console.WriteLine($"ชนิดข้อมูล: {typeof(ulong)}");
        Console.WriteLine($"ขนาด: {sizeof(ulong)} ไบต์ ({sizeof(ulong) * 8} บิต)");
        
        // การใช้งานทั่วไป
        Console.WriteLine("\n--- การใช้งานทั่วไป ---");
        
        // ตัวเลขขนาดใหญ่ (File size, Timestamp, ID)
        ulong fileSize = 15000000000; // 15 GB
        ulong timestamp = 17040672000000000; // Unix timestamp ในนาโนวินาที
        ulong userId = 1234567890123456789;
        
        Console.WriteLine($"ขนาดไฟล์: {fileSize:N0} ไบต์");
        Console.WriteLine($"Timestamp: {timestamp}");
        Console.WriteLine($"User ID: {userId}");
        
        // การแปลงชนิด
        Console.WriteLine("\n--- การแปลงชนิด ---");
        long signed = (long)val; // Explicit cast (อาจสูญเสียค่าหาก > long.MaxValue)
        Console.WriteLine($"แปลงเป็น long: {signed}");
        
        ulong fromLong = (ulong)Math.Abs(-100L); // จากค่าลบ (ต้องใช้ Abs)
        Console.WriteLine($"จาก long ลบ: {fromLong}");
    }
}

ผลลัพธ์

ค่าตัวอย่าง: 7712059531
ค่าต่ำสุด (MinValue): 0
ค่าสูงสุด (MaxValue): 18446744073709551615
ชนิดข้อมูล: System.UInt64
ขนาด: 8 ไบต์ (64 บิต)

--- การใช้งานทั่วไป ---
ขนาดไฟล์: 15,000,000,000 ไบต์
Timestamp: 17040672000000000
User ID: 1234567890123456789

--- การแปลงชนิด ---
แปลงเป็น long: 7712059531
จาก long ลบ: 100

เมื่อไหนควรใช้ ulong?

  • ขนาดไฟล์/หน่วยความจำที่ใหญ่ (> 2 GB)
  • ตัวระบุ ID ขนาดใหญ่ (User ID, Transaction ID)
  • Timestamp ความแม่นยำสูง (Ticks, Nanoseconds)
  • การคำนวณบิตเวรกับ (Bitwise operations)
  • Interop กับ API ที่ใช้ unsigned 64-bit

การแปลงระหว่างชนิดตัวเลข

ulong u = 100;
long l = 100;

// Implicit conversion (ปลอดภัย - ไม่สูญเสียข้อมูล)
ulong fromInt = 100;        // int → ulong
ulong fromUint = 100u;      // uint → ulong
ulong fromLong = 100L;      // long → ulong (ต้องแน่ใจว่าไม่ติดลบ)

// Explicit conversion (อาจสูญเสียข้อมูล)
long l2 = (long)u;          // ulong → long (อาจ overflow หาก u > long.MaxValue)
int i = (int)u;             // ulong → int (อาจ truncate)

// Safe conversion
long safe = u <= long.MaxValue ? (long)u : long.MaxValue;

ข้อควรระวัง

  • ไม่สามารถเก็บค่าติดลบได้
  • การแปลงจาก signed types ต้องระวัง Overflow
  • ใน JSON serialization บางไลบรารีอาจ serialize เป็นสตริง เพราะ JavaScript ไม่มี integer 64-bit
  • ค่าคงที่ literal ใช้ suffix UL หรือ ul: 100UL