Lập trình C là một ngành học đòi hỏi kiến thức vững chắc về toán tử và biểu thức. Bài viết này sẽ giới thiệu với bạn về các toán tử và cách thức tính toán trong biểu thức. Hãy cùng khám phá nhé!
Lý thuyết cơ bản về toán tử và biểu thức trong lập trình C
Các loại toán tử
Toán tử gán
Toán tử gán (=) được sử dụng để gán giá trị của một biểu thức cho một biến.
Ví dụ:
int x = 5;
Toán tử số học
Toán tử số học được sử dụng để thực hiện các phép toán số học.
Các toán tử số học bao gồm: cộng (+), trừ (-), nhân (*), chia nguyên (/), chia dư (%).
Ví dụ:
int a = 5, b = 3;
int sum = a + b;
int difference = a - b;
int product = a * b;
int quotient = a / b;
int remainder = a % b;
Toán tử quan hệ (so sánh)
Toán tử quan hệ được sử dụng để so sánh giá trị giữa hai biến hoặc giữa một biến và một hằng số.
Các loại toán tử quan hệ bao gồm: lớn hơn (>), lớn hơn hoặc bằng (>=), nhỏ hơn (), nhỏ hơn hoặc bằng (=), bằng (==), khác (!=).
Kết quả của toán tử này sẽ trả về giá trị đúng (1) hoặc sai (0).
Ví dụ:
int x = 5, y = 3;
int result1 = (x > y); // Kết quả: 1 (đúng)
int result2 = (x != y); // Kết quả: 1 (đúng)
int result3 = (x y); // Kết quả: 0 (sai)
Toán tử logic
Toán tử logic được sử dụng để tổng hợp các biểu thức chứa toán tử quan hệ.
Các toán tử logic: AND (&&), OR (||), NOT (!).
Cách hoạt động của toán tử AND (&&):
- Nếu cả hai biểu thức đều đúng, kết quả trả về là đúng.
- Nếu một trong hai biểu thức sai, kết quả trả về là sai.
Cách hoạt động của toán tử OR (||):
- Nếu một trong hai biểu thức đúng, kết quả trả về là đúng.
- Nếu cả hai biểu thức đều sai, kết quả trả về là sai.
Cách hoạt động của toán tử NOT (!):
- Đảo ngược giá trị của biểu thức. Nếu biểu thức là đúng, kết quả trả về là sai và ngược lại.
Toán tử logic bit
Toán tử logic bit là toán tử logic được áp dụng trên đối tượng là bit.
Các toán tử bit là: AND (&), OR (|), XOR (^), NOT (~).
Khi thực hiện với toán tử bit, các toán hạng sẽ được quy đổi sang số hệ nhị phân. Sau đó, ta sẽ thực hiện toán tử bit với các bit ở vị trí tương ứng nhau.
Cách hoạt động của toán tử bit AND (&):
- Kết quả sẽ là 1 nếu cả hai bit đều là 1, ngược lại là 0.
Cách hoạt động của toán tử bit OR (|):
- Kết quả sẽ là 1 nếu một trong hai bit là 1, ngược lại là 0.
Cách hoạt động của toán tử bit XOR (^):
- Kết quả sẽ là 1 nếu hai bit khác nhau, ngược lại là 0.
Cách hoạt động của toán tử bit NOT (~):
- Đảo ngược giá trị của bit.
Cách biểu diễn số ở các hệ cơ số khác nhau:
Chuyển đổi kiểu dữ liệu
Chuyển đổi kiểu dữ liệu là việc chuyển đổi một biến từ kiểu dữ liệu này sang kiểu dữ liệu khác.
Có hai kiểu chuyển đổi dữ liệu: chuyển đổi tự động (trình biên dịch) và chuyển đổi thủ công (ép kiểu).
Chuyển đổi kiểu dữ liệu tự động
Chuyển đổi tự động được thực hiện bởi trình biên dịch. Việc chuyển đổi này xảy ra khi trong biểu thức có nhiều hơn một kiểu dữ liệu.
Khi đó, các kiểu dữ liệu sẽ được chuyển thành kiểu dữ liệu lớn nhất trong các kiểu dữ liệu xuất hiện trong biểu thức. Thứ tự chuyển đổi từ kiểu dữ liệu nhỏ sang kiểu dữ liệu lớn hơn.
Ép kiểu dữ liệu (casts)
Ép kiểu dữ liệu là việc chủ động chuyển đổi một kiểu dữ liệu này sang kiểu dữ liệu khác.
Cú pháp: (type) data.
Ví dụ:
float x = 3.14;
int y = (int) x;
Thứ tự ưu tiên của các toán tử
Trong biểu thức có nhiều toán tử, mỗi toán tử có một mức độ ưu tiên khác nhau. Toán tử có độ ưu tiên cao hơn sẽ được thực hiện trước. Khi các toán tử có độ ưu tiên giống nhau, thì thứ tự thực hiện là từ trái sang phải hoặc từ phải sang trái.
Thứ tự ưu tiên của một số toán tử số học
Thứ tự ưu tiên giảm dần từ trên xuống dưới.
Thứ tự ưu tiên của các toán tử so sánh
Các toán tử so sánh có thứ tự ưu tiên giống nhau, nên chúng luôn thực hiện từ trái sang phải.
Thứ tự ưu tiên của các toán tử logic
Thứ tự ưu tiên là: NOT, AND, OR. Trường hợp có nhiều toán tử NOT, AND, OR thì sẽ thực hiện theo thứ tự từ phải sang trái.
Ví dụ:
int a = 5, b = 3, c = 2;
int result = (a > b && b > c); // Kết quả: 1 (đúng)
So sánh thứ tự ưu tiên
So sánh thứ tự ưu tiên của các toán tử số học, so sánh, logic: toán tử số học > toán tử so sánh > toán tử logic.
Ví dụ:
int result = 5 + 3 * 2; // Kết quả: 11
Thay đổi thứ tự ưu tiên
Có thể sử dụng cặp dấu ngoặc () để thay đổi thứ tự ưu tiên. Hay nói cách khác, cặp () có độ ưu tiên cao nhất.
Do đó, toán tử có độ ưu tiên thấp mà đặt trong cặp dấu () sẽ vẫn được thực hiện trước.
Ngoài ra, trong trường hợp có nhiều cặp () lồng nhau, cặp () trong cùng sẽ thực hiện trước. Trường hợp các cặp () ngang nhau thì sẽ thực hiện từ trái sang phải.
Bài tập thực hành về nhập xuất dữ liệu trong lập trình C
Cho int x = 1, y = 2, z = 3;
Tính giá trị của t1
, t2
, t3
, t4
(các câu hỏi sau là độc lập với nhau)
int t1 = x && y || z; // Kết quả: 1 (đúng)
int t2 = x || !y && z; // Kết quả: 1 (đúng)
int t3 = x && (y || z); // Kết quả: 1 (đúng)
int t4 = x && y || !z; // Kết quả: 1 (đúng)
Đây là một số kiến thức cơ bản về toán tử và biểu thức trong lập trình C. Hy vọng rằng bài viết này đã giúp bạn hiểu rõ hơn về chủ đề này. Chúc bạn thành công trong hành trình lập trình!