Integer
ในภาษา Rust การจัดการตัวเลขจำนวนเต็ม (Integer) มีการกำหนดประเภทที่ชัดเจนตามขนาดและชนิดของจำนวนเต็มที่ต้องการใช้ เช่น ขนาดของบิต (เช่น 8, 16, 32, 64, 128) และลักษณะการเก็บข้อมูล (Signed หรือ Unsigned)
- Signed integers (
i8,i16,i32,i64,i128): ตัวเลขจำนวนเต็มที่สามารถเป็นค่าได้ทั้งบวกและลบ - Unsigned integers (
u8,u16,u32,u64,u128): ตัวเลขจำนวนเต็มที่ไม่เป็นค่าลบ
ข้อจำกัด
เนื่องจาก Signed integers สามารถเก็บจำนวนลบได้ ทำให้ในกรณีที่จำนวนบิตเท่ากัน Unsigned integers จะสามารถเก็บจำนวนบวกได้มากกว่า
note
ตัวอย่าง Integer ขนาด 8 บิต
i8จะมีช่วงของค่าอยู่ที่ -27 จนถึง 27 - 1u8จะมีช่วงของค่าอยู่ที่ 0 จนถึง 28 - 1
ตัวอย่างการใช้งาน Integer
fn main() { let u_int:u8 = 255; let int:i8 = 127; println!("{} {}", u_int, int); }
ลองคิดดู
- จะเกิดอะไรขึ้นถ้าเราทำให้ค่าของตัวแปรไม่อยู่ในช่วงของประเภทที่เราประกาศ?
u32มีช่วงของค่าที่เก็บได้เป็นเท่าไหร่?i32มีช่วงของค่าที่เก็บได้เป็นเท่าไหร่?
Float
ในภาษา Rust ตัวเลขทศนิยมถูกแบ่งออกเป็นประเภทที่ชัดเจน โดยมี 2 ประเภทหลัก:
f32: ตัวเลขทศนิยมแบบ 32 บิตf64: ตัวเลขทศนิยมแบบ 64 บิต
การใช้ f32 และ f64 ขึ้นอยู่กับความต้องการในการจัดเก็บและความแม่นยำที่ต้องการในการคำนวณ โดยทั่วไปแล้ว f64 จะถูกใช้เป็นค่าเริ่มต้นเนื่องจากมีความแม่นยำสูงกว่า
ตัวอย่างการใช้งาน Float
fn main() { let f1:f32 = 1.0; let f2:f32 = 7.0; println!("{}", f1 / f2); }
ลองแก้โค้ดดู
- ลองเปลี่ยนชนิดของ
f1และf2เป็นf64แล้วดูผลลัพธ์มีความแตกต่างจากเดิมหรือไม่- ลองเปลี่ยน
f1และf2เป็นintegerแล้วสังเกตความแตกต่างที่เกิดขึ้น
Type Conversion
ในการเขียนโปรแกรมด้วยภาษา Rust บางครั้งเราจำเป็นต้องแปลงค่าจากชนิดข้อมูลหนึ่งไปยังอีกชนิดหนึ่ง เช่น จาก f64 ไปเป็น i64 หรือจาก u32 ไปเป็น f64
การแปลงชนิดข้อมูลสามารถทำได้โดยใช้คำสั่ง as ซึ่งเป็นตัวดำเนินการสำหรับการแปลงชนิดข้อมูลใน Rust
ตัวอย่างการแปลงชนิดข้อมูล
fn main() { let float_num: f64 = 10.5; let int_num: i64 = float_num as i64; println!("{} convert to {}", float_num, int_num); }
ในตัวอย่างนี้ เราแปลงค่าจาก f64 ไปเป็น i64 โดยใช้ as i64 ซึ่งจะตัดส่วนทศนิยมออก
การดำเนินการกับตัวเลขชนิดต่างกัน
ในการดำเนินการทางคณิตศาสตร์ เช่น การบวก ลบ คูณ หาร หรือการเปรียบเทียบ Rust จะไม่อนุญาตให้ดำเนินการกับตัวแปรที่มีชนิดข้อมูลต่างกัน เราต้องทำการแปลงชนิดข้อมูลให้ตรงกันก่อนจึงจะสามารถดำเนินการได้
ตัวอย่างการดำเนินการกับตัวแปรชนิดต่างกัน
fn main() { let int_num: i32 = 10; let float_num: f32 = 5.5; let result = int_num as f32 + float_num; println!("sum : {}", result); }
ในตัวอย่างนี้ หากเราพยายามบวก int_num กับ float_num โดยตรงจะเกิดข้อผิดพลาด เนื่องจากชนิดข้อมูลไม่ตรงกัน เราจึงต้องแปลง int_num เป็น f32 ก่อนด้วย as f32
note
Rust เป็นภาษาที่มีความเข้มงวดในการจัดการชนิดข้อมูล เพื่อป้องกันข้อผิดพลาดที่อาจเกิดขึ้นจากการแปลงชนิดข้อมูลโดยไม่ได้ตั้งใจ
ลองทำดู
- ลองแปลง
float_numเป็นi32แล้วสังเกตค่าที่ได้- ลองดำเนินการคูณระหว่าง
u8และi8โดยไม่แปลงชนิดข้อมูล แล้วดูว่ามีข้อผิดพลาดอะไรเกิดขึ้น?- ลองแปลง
i32เป็นu32และลองใส่ค่าที่เป็นลบ ดูว่าเกิดอะไรขึ้น?