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