Biểu thức là một công thức tính toán, bao gồm 2 phần: Được tạo thành từ các toán tử (Operator) và các toán hạng (Operand). Toán tử là các phép toán, toán hạng có thể là hằng, biến hay hàm nào đó.
Có 2 loại toán tử: một ngôi (lấy đối số, tăng giảm một đơn vị) và 2 ngôi (cộng, trừ, nhân, chia, lấy dư và lũy thừa).
Ví dụ: 2 + 3*(++a) + sum(a, b) – 2^3
Có 3 loại biểu thức:
- Biểu thức số học: trả về giá trị số
- Biểu thức logic: trả về kết quả đúng, sai
- Biểu thức quan hệ: liên quan đến các phép toán so sánh (>, <, !=, ==, …).
Ví dụ: toán tử 1 ngôi
#include <stdio.h> void main() { int a = 5, b = 10; int c = -a; printf("\nGia tri c = %d", c); //kết quả c = -5 printf("\nXuat a++ = %d", a++); //kết quả 5 printf("\nXuat ++b = %d", ++b); //kết quả 11 }
Ghi chú: biểu thức x = x + 1 tương đương với ++x hay x++;
Ví dụ: toán tử 2 ngôi
#include <stdio.h> void main() { int a = 5, b = 10; int c = (a*b/2)%4; int d = a^3; printf("\nGia tri c = %d", c); //kết quả c = 1 printf("\nGia tri d = %d", d); //kết quả 125 = 5*5*5 }
Biểu thức phẩy
Mỗi câu lệnh trong ngôn ngữ lập trình C được kết thúc bằng dấu chấm phẩy, tuy nhiên trong một biểu thức của ngôn ngữ lập trình C có thể có nhiều câu lệnh được cách nhau bởi dấu phẩy.
Ví dụ:
x = a*b, q = x + y, k = q / z;
int n, m;
char ho[50], ten[50];
Biểu thức điều kiện
Cú pháp:
<Tên biến> = <Biểu thức điều kiện> ? <Biểu thức 1> : <Biểu thức 2>
Ví dụ:
m = a > b ? a : b /* m = max(a,b) */
Toán tử số học: cộng, trừ, nhân, chia, lấy dư và lũy thừa lần lượt tương ứng với các ký hiệu +, -, *, /, %, ^.
Ghi chú:
- Phép toán % không dùng cho kiểu dữ liệu float hay double.
- Phép chia(/) thực hiện theo kiểu của các toán hạng dù là phép chia số nguyên hay số thực.
Ví dụ
#include <stdio.h> void main() { int x = 10, y = 3; float z1, z2; z1 = x/y; z2 = (float)x/y; printf("\n%d chia %d du: %d", x, y, x%y); //kết quả du 1 printf("\n z1 = %.2f", z1); // kết quả z1 = 3.00 printf("\nz2 = %.3f", z2); // kết quả z2 = 3.333 }
Toán tử quan hệ: bao gồm == ,!=, >=, >, <=, <
Toán tử logic: bao gồm && (phép AND), || (phép OR), ! (phép NOT).
- A && B: đúng <=> A: đúng và B: đúng
- A || B: sai <=> A: sai và B: sai
- Nếu A: đúng thì !A: sai
Toán tử trên bit: bao gồm phép AND (&), OR(|), XOR(^), phép dịch trái (<<), phép dịch phải (>>) và phép đảo bit (~).
Cách thực hiện các phép toán trên bit:
1 & 1 = 1 1 | 1 = 1 1 ^ 1 = 0
1 & 0 = 0 1 | 0 = 1 1 ^ 0 = 1
0 & 1 = 0 0 | 1 = 1 0 ^ 1 = 1
0 & 0 = 0 0 | 0 = 0 0 ^ 0 = 0
- qx << M nghĩa là dịch sang trái số nguyên x đi M bit, tương đương với x*2M
- qx >> M nghĩa là dịch sang phải số nguyên x đi M bit, tương đương với phép chia x/2M (chia lấy phần nguyên).
Ví dụ: Ta có thể thay phép tính x*80 bằng cách:
x << 6 + x << 4 vì 80 = 26 +24
Toán tử tăng giảm 1:
- i = i + 1 có thể được viết thành: i++(tăng sau) hoặc ++i(tăng trước).
- i = i – 1 có thể được viết thành: i– ( giảm sau) hoặc –i (giảm trước).
Ví dụ: với i = 5 ; j = 10;
a/ i = ++ j ; i = j kết quả i = 11, j = 11
b/ i = j++ kết quả i = 10, j = 11
c/ j = –i + 2 kết quả i = 4, j = 6
d/ j = i– + 2 kết quả i = 4, j = 7
Toán tử gán: <Tên biến> = <biểu thức>
Toán tử gán (=) có thể được dùng với bất kỳ biểu thức C hợp lệ nào
Có 3 loại phép gán khác nhau: phép gán đơn, phép gán kép và phép gán mở rộng.
Ví dụ:
- Gán đơn:
i = 3;
i = i + 4 ;
sum = A + B; // chép tổng A + B vào biến sum
sum = A + 2; // chép tổng A + 2 vào biến sum
sum = A + n; // chép tổng A + n vào biến sum
- Gán kép:
a= b = c = 5;
a= b + ( c = 5);
- Gán mở rộng:
x += y ⇔ x = x + y x -= y ⇔ x = x – y x *= y ⇔ x = x*y
x /= y ⇔x = x / y x %= y ⇔ x = x % y x >>=y ⇔ x = x >> y
x <<=y ⇔ x = x << y x &= y ⇔ x = x & y x |= y ⇔ x = x | y
x ^= y ⇔ x = x ^ y
Gán liên tiếp: