Toán tử thực hiện thao tác trên dữ liệu. Chúng được phân loại như sau:
- Toán tử số học.
- Toán tử quan hệ.
- Toán tử logic.
- Toán tử gán.
- Toán tử tăng/giảm.
- Toán tử thao tác bit.
- Toán tử điều kiện.
- Toán tử đặc biệt.
Toán tử số học
Các toán tử này dùng cho tính toán số học hoặc thực hiện các phép toán như cộng, trừ, v.v.
| Toán tử | Mô tả | Ví dụ | a=20, b=10 | Kết quả |
|---|---|---|---|---|
| + | Cộng | a+b | 20+10 | 30 |
| - | Trừ | a-b | 20-10 | 10 |
| * | Nhân | a*b | 20*10 | 200 |
| / | Chia | a/b | 20/10 | 2 (thương) |
| % | Chia lấy dư | a%b | 20%10 | 0 (dư) |
Chương trình minh họa
Chương trình C sau đây minh họa các toán tử số học:
#include <stdio.h>
int main() {
int a = 20, b = 10;
printf("%d ", a+b);
printf("%d ", a-b);
printf("%d ", a*b);
printf("%d ", a/b);
printf("%d ", a%b);
return 0;
}
Kết quả
Khi chạy chương trình trên, kết quả như sau:
30 10 200 2 0
Toán tử quan hệ
Dùng để so sánh hai biểu thức.
| Toán tử | Mô tả | Ví dụ | a=10, b=20 | Kết quả |
|---|---|---|---|---|
| < | Nhỏ hơn | a<b | 10<20 | 1 (đúng) |
| <= | Nhỏ hơn hoặc bằng | a<=b | 10<=20 | 1 |
| > | Lớn hơn | a>b | 10>20 | 0 (sai) |
| >= | Lớn hơn hoặc bằng | a>=b | 10>=20 | 0 |
| == | Bằng | a==b | 10==20 | 0 |
| != | Khác | a!=b | 10!=20 | 1 |
Kết quả của biểu thức quan hệ là true (1) hoặc false (0).
Chương trình minh họa
#include <stdio.h>
int main() {
int a = 10, b = 20;
printf("%d ", a<b);
printf("%d ", a<=b);
printf("%d ", a>b);
printf("%d ", a>=b);
printf("%d ", a==b);
printf("%d ", a!=b);
return 0;
}
Kết quả
1 1 0 0 0 1
Toán tử logic
Dùng để kết hợp hai hoặc nhiều biểu thức một cách logic. Bao gồm: AND (&&), OR (||), NOT (!).
Bảng chân lý AND (&&)
| exp1 | exp2 | exp1 && exp2 |
|---|---|---|
| Đúng | Đúng | Đúng |
| Đúng | Sai | Sai |
| Sai | Đúng | Sai |
| Sai | Sai | Sai |
Bảng chân lý OR (||)
| exp1 | exp2 | exp1 || exp2 |
|---|---|---|
| Đúng | Đúng | Đúng |
| Đúng | Sai | Đúng |
| Sai | Đúng | Đúng |
| Sai | Sai | Sai |
Bảng chân lý NOT (!)
| exp | !exp |
|---|---|
| Đúng | Sai |
| Sai | Đúng |
Ví dụ với giá trị
| Toán tử | Mô tả | Ví dụ | a=10,b=20,c=30 | Kết quả |
|---|---|---|---|---|
| && | AND logic | (a>b)&&(a<c) | (10>20)&&(10<30) | 0 |
| || | OR logic | (a>b)||(a<=c) | (10>20)||(10<30) | 1 |
| ! | NOT logic | !(a>b) | !(10>20) | 1 |
Chương trình minh họa
#include <stdio.h>
int main() {
int a = 10, b = 20, c = 30;
printf("%d ", (a>b) && (a<c));
printf("%d ", (a>b) || (a<c));
printf("%d ", !(a>b));
return 0;
}
Kết quả
0 1 1
Toán tử gán
Gán giá trị cho biến. Các loại:
- Gán đơn giản (=).
- Gán kết hợp (+=, -=, *=, /=, %=).
| Toán tử | Mô tả | Ví dụ |
|---|---|---|
| = | Gán đơn giản | a=10 |
| +=, -=, *=, /=, %= | Gán kết hợp | a+=10 <=> a=a+10 a-=10 <=> a=a-10 |
Chương trình minh họa
#include <stdio.h>
int main() {
int a = 10;
printf("%d ", a);
a += 10;
printf("%d ", a);
return 0;
}
Kết quả
10 20
Toán tử tăng/giảm
Toán tử tăng (++)
Tăng giá trị biến lên 1. Hai dạng:
- Tiền tố (++a): tăng trước, dùng sau.
- Hậu tố (a++): dùng trước, tăng sau.
Ví dụ:
z = ++a; // a = a+1; z = a z = a++; // z = a; a = a+1
Chương trình minh họa
| Tiền tố | Hậu tố |
|---|---|
int main() {
int a=10, z;
z = ++a;
printf("z=%d", z);
printf("a=%d", a);
return 0;
} |
int main() {
int a=10, z;
z = a++;
printf("z=%d", z);
printf("a=%d", a);
return 0;
} |
Kết quả:z=11 a=11 |
Kết quả:z=10 a=11 |
Toán tử giảm (--)
Giảm giá trị biến đi 1. Hai dạng:
- Tiền tố (--a): giảm trước, dùng sau.
- Hậu tố (a--): dùng trước, giảm sau.
Ví dụ:
z = --a; // a = a-1; z = a z = a--; // z = a; a = a-1
Chương trình minh họa
| Tiền tố | Hậu tố |
|---|---|
int main() {
int a=10, z;
z = --a;
printf("z=%d", z);
printf("a=%d", a);
return 0;
} |
int main() {
int a=10, z;
z = a--;
printf("z=%d", z);
printf("a=%d", a);
return 0;
} |
Kết quả:z=9 a=9 |
Kết quả:z=10 a=9 |
Toán tử thao tác bit
Thao tác trực tiếp trên các bit.
| Toán tử | Mô tả |
|---|---|
| & | AND bit |
| | | OR bit |
| ^ | XOR bit |
| << | Dịch trái |
| >> | Dịch phải |
| ~ | Phép bổ sung 1 (One's Complement) |
Bảng chân lý AND bit
| a | b | a&b |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
Bảng chân lý OR bit
| a | b | a|b |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
Bảng chân lý XOR bit
| a | b | a^b |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Chương trình minh họa (AND, OR, XOR)
#include <stdio.h>
int main() {
int a = 12, b = 10; // 12 = 1100, 10 = 1010
printf("%d ", a & b); // 1000 = 8
printf("%d ", a | b); // 1110 = 14
printf("%d ", a ^ b); // 0110 = 6
return 0;
}
Kết quả
8 14 6
Dịch trái (<<)
Dịch trái 1 lần nhân đôi giá trị. Ví dụ: a=10, a<<1 = 20.
Dịch phải (>>)
Dịch phải 1 lần giảm giá trị đi một nửa. Ví dụ: a=10, a>>1 = 5.
Phép bổ sung 1 (~)
Đảo ngược tất cả bit (0 thành 1, 1 thành 0). Ví dụ: a=5 (0101), ~a = 1010 (10) nếu dùng 4 bit. Với số có dấu, ~a = -(a+1).
Chương trình minh họa (dịch bit, phép bổ sung)
#include <stdio.h>
int main() {
int a = 20, b = 10, c = 10;
printf("%d ", a << 1); // 40
printf("%d ", b >> 1); // 5
printf("%d ", ~c); // -11 (bổ sung 2)
return 0;
}
Kết quả
40 5 -11
Toán tử điều kiện (? :)
Còn gọi là toán tử ba ngôi.
Cú pháp: biểu_thức1 ? biểu_thức2 : biểu_thức3
Nếu biểu_thức1 đúng thì thực hiện biểu_thức2, ngược lại biểu_thức3. Tương đương:
if (biểu_thức1) biểu_thức2; else biểu_thức3;
Chương trình minh họa
#include <stdio.h>
int main() {
int z = (5 > 3) ? 1 : 0;
printf("%d", z);
return 0;
}
Kết quả
1
Toán tử đặc biệt
- Dấu phẩy (,) – Phân tách biến. VD:
a=10, b=20 - Toán tử lấy địa chỉ (&) – Lấy địa chỉ biến.
- Toán tử sizeof() – Lấy kích thước kiểu dữ liệu/biến (byte).
Chương trình minh họa
#include <stdio.h>
int main() {
int a = 10;
float b = 20;
printf("a=%d b=%f ", a, b);
printf("Địa chỉ a =%p\n", (void*)&a);
printf("Địa chỉ b =%p\n", (void*)&b);
printf("Kích thước a = %zu byte\n", sizeof(a));
printf("Kích thước b = %zu byte", sizeof(b));
return 0;
}
Kết quả
a=10 b=20.000000 Địa chỉ a =0x7ffc... Địa chỉ b =0x7ffc... Kích thước a = 4 byte Kích thước b = 4 byte