Zig Academy · บทเรียน

จำนวนเต็มความกว้างตามต้องการ เช่น u3

ใช้ชนิดตัวเลขที่กำหนดจำนวนบิตได้อย่างแม่นยำ

บทเรียน 2 จาก 413 ขั้นตอน

จำนวนเต็มความกว้างตามต้องการ เช่น u3 เป็นบทเรียน Zig Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Zig Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน

ก้าวพ้น u8 และ u32

Zig ไม่ได้จำกัดอยู่แค่ขนาดที่ใช้กันทั่วไป คุณสามารถขอจำนวนเต็มที่มี ความกว้างกี่บิตก็ได้ ตั้งแต่ u1 ไปจนถึงค่าขนาดมหาศาล

รูปแบบ uN

เขียน u ตามด้วยตัวเลข เพื่อได้จำนวนเต็มไม่มีเครื่องหมายที่มีจำนวนบิตตรงตามนั้น ดังนั้น u3 จึงเก็บได้สามบิต

const level: u3 = 5;

มีชนิดแบบมีเครื่องหมายเช่นกัน

เปลี่ยน u เป็น i เพื่อได้จำนวนเต็มมีเครื่องหมายที่มีความกว้างเท่าใดก็ได้ ดังนั้น i4 จึงครอบคลุมช่วงค่ามีเครื่องหมายขนาดเล็ก

const delta: i4 = -3;

ควบคุมช่วงค่าได้อย่างแน่นอน

u3 เก็บค่าได้ตั้งแต่ 0 ถึง 7 เพราะสามบิตให้ชุดค่าที่เป็นไปได้แปดแบบ ชนิดข้อมูลจะบังคับใช้ช่วงค่านี้เอง

ค้นหาขอบเขต

ขอขอบเขตของชนิดข้อมูลด้วย maxInt และ minInt แทนการจำค่าด้วยตนเอง

const hi = std.math.maxInt(u3); // 7
const lo = std.math.minInt(u3); // 0

จำนวนเต็มขนาดหนึ่งบิต

u1 เก็บได้เพียง 0 หรือ 1 ทำหน้าที่เสมือนบิตดิบหนึ่งบิตที่คุณจัดเก็บและคำนวณได้โดยตรง

const bit: u1 = 1;

u0 เป็นชนิดข้อมูลจริง

แม้แต่ u0 ก็มีอยู่จริง โดยมีค่าได้เพียง 0 และไม่ใช้บิตเลย ซึ่งมีประโยชน์ในโค้ด Generic

เหมาะกับฟิลด์แบบ Packed

ความกว้างแปลก ๆ อย่าง u3 และ u5 เหมาะอย่างยิ่งสำหรับใช้ภายใน packed struct ทำให้แต่ละฟิลด์ใช้บิตเท่าที่จำเป็นพอดี

const Color = packed struct {
    r: u5,
    g: u6,
    b: u5,
};

ระวังค่าล้น

การกำหนดค่า 8 ให้กับ u3 จะทำให้ค่าเกินช่วง ในโหมดปลอดภัย Zig จะตรวจจับเรื่องนี้ขณะรันไทม์แทนที่จะปล่อยให้ค่าหมุนกลับอย่างเงียบ ๆ

แคสต์เพื่อขยายความกว้าง

ใช้ @as หรือ @intCast เพื่อย้ายค่าที่มีความกว้างน้อยไปยังชนิดข้อมูลที่กว้างกว่า เมื่อต้องการพื้นที่คำนวณเพิ่ม

const small: u3 = 5;
const big: u16 = @as(u16, small);

สื่อเจตนาให้ชัดเจน

ความกว้างที่กำหนดเองช่วยให้ระบบชนิดข้อมูลบันทึกข้อจำกัดจริงของคุณไว้ ดังนั้น u4 จึงสื่อได้ชัดเจนว่าค่าจะไม่เกิน 15 🎯

ตรวจสอบอย่างรวดเร็ว

ลองคิดดูว่าสามบิตสามารถเก็บค่าที่แตกต่างกันได้กี่ค่า

ทบทวน

คุณได้รู้จักจำนวนเต็มความกว้างกำหนดเองอย่าง u3 และ i4 ซึ่งมีช่วงค่าแน่นอน เหมาะกับฟิลด์แบบ packed และตรวจจับค่าล้นในโหมดปลอดภัย 🎉

เริ่มต้นได้ฟรี

เรียนรู้ Zig ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

คำถามที่พบบ่อย

บทเรียน “จำนวนเต็มความกว้างตามต้องการ เช่น u3” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “จำนวนเต็มความกว้างตามต้องการ เช่น u3” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Zig Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “จำนวนเต็มความกว้างตามต้องการ เช่น u3”

ใช้ชนิดตัวเลขที่กำหนดจำนวนบิตได้อย่างแม่นยำ คุณปฏิบัติ Zig Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Zig Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Zig Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “จำนวนเต็มความกว้างตามต้องการ เช่น u3” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Zig Academy นี้ได้ไหม

ได้ บทเรียน Zig Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. packed struct สำหรับโครงสร้างหน่วยความจำที่แม่นยำ
  2. จำนวนเต็มความกว้างตามต้องการ เช่น u3
  3. ฟิลด์บิตและแฟล็ก
  4. extern struct และโครงสร้างหน่วยความจำตาม ABI
← กลับไปที่ Zig Academy