Literals và operators
Số nguyên 1
, số thực 1.2
, ký tự 'a'
, xâu "abc"
, boolean true
and kiểu đơn vị ()
đều có thể được diễn đạt bằng literals.
Literal là gì? Nó là một giá trị thể hiện chính nó, một giá trị cố định được chèn trực tiếp
vào code mà chương trình không thể thay đổi trong quá trình thực thi.
Các số nguyên có thể được biểu diễn theo các cách khác nhau dưới dạng số thập lục phân (hexadecimal literals),
bát phân (octal literals) hay nhị phân (binary literals), bằng cách sử dụng các tiền tố tương ứng: 0x
, 0o
or 0b
.
Dấu gạch dưới có thể được chèn vào trong các numeric literals (hiểu đơn giản là các số)
để giúp việc biểu diễn số được rõ ràng, dễ đọc hơn, ví dụ:
1_000
chính là 1000
, và 0.000_001
chính là 0.000001
nhưng dễ đọc hơn.
Chúng ta cũng cần cho trình biên dịch biết kiểu literals mà ta sử dụng. Như trong đoạn code bên dưới,
ta sẽ sử dụng hậu tố u32
để chỉ ra rằng literal ở đây là một nguyên không dấu 32-bit
và hậu tố i32
để chỉ ra rằng đây là một số nguyên có dấu 32 bit.
Các operators (toán tử, phép toán) là có sẵn trong Rust và mức độ ưu tiên của chúng trong Rust là tương tự như trong các ngôn ngữ lập trình được truyền cảm hứng từ C khác.
fn main() { // 100 là một numeric literals let i: u32 = 100; // Phép cộng hai số nguyên println!("1 + 2 = {}", 1u32 + 2); // Phép trừ hai số nguyên println!("1 - 2 = {}", 1i32 - 2); // TODO ^ Thử thay đổi `1i32` sang `1u32` và quan sát lỗi // để xem tại sao kiểu của biến lại quan trọng. // Short-circuiting boolean logic (Các phép toán logic: hội, tuyển, phủ định) println!("true AND false is {}", true && false); println!("true OR false is {}", true || false); println!("NOT true is {}", !true); // Các toán tử Bitwise (Thao tác bit) println!("0011 AND 0101 is {:04b}", 0b0011u32 & 0b0101); println!("0011 OR 0101 is {:04b}", 0b0011u32 | 0b0101); println!("0011 XOR 0101 is {:04b}", 0b0011u32 ^ 0b0101); println!("1 << 5 is {}", 1u32 << 5); println!("0x80 >> 2 is 0x{:x}", 0x80u32 >> 2); // Sử dụng dấu gạch dưới để việc biểu diễn số được sáng sủa và dễ đọc hơn! println!("One million is written as {}", 1_000_000u32); }