1. Giới thiệu
Ngôn ngữ C được sử dụng rộng rãi trong nhiều lĩnh vực như lập trình hệ thống và phát triển nhúng. Trong đó,toán tử so sánh là yếu tố không thể thiếu để thực hiện các quyết định logic như rẽ nhánh điều kiện và điều khiển vòng lặp.
Bài viết này sẽ giải thích chi tiết về toán tử so sánh trong C. Nội dung được trình bày dành cho người mới bắt đầu, giới thiệu cách sử dụng cơ bản kèm theo ví dụ mã nguồn thực tế và các lưu ý quan trọng, giúp ích cho những ai đang học lập trình hoặc muốn ôn lại kiến thức nền tảng.
2. Toán tử so sánh là gì?
Định nghĩa toán tử so sánh
Toán tử so sánh là toán tử dùng để so sánh 2 giá trị và trả về kết quả là true (1) hoặc false (0). Chúng được sử dụng để đánh giá điều kiện trong chương trình, đặc biệt quan trọng trong các cấu trúc rẽ nhánh (if
, switch
) và vòng lặp (while
, for
).
Ứng dụng của toán tử so sánh
Toán tử so sánh hữu ích trong các trường hợp sau:
- Điều kiện rẽ nhánh: Thực thi một đoạn mã chỉ khi điều kiện được thỏa mãn.
- Vòng lặp: Lặp lại một đoạn mã trong khi điều kiện còn đúng.
- Kiểm tra dữ liệu nhập: Xác minh xem giá trị nhập vào có đáp ứng điều kiện hay không.
Ví dụ:
int a = 10, b = 20;
if (a < b) {
printf("a nhỏ hơn bn");
}
Đoạn mã trên so sánh a
và b
, nếu điều kiện đúng sẽ in ra thông báo.
3. Danh sách toán tử so sánh trong C
Các toán tử chính và chức năng
Bảng dưới đây tổng hợp các toán tử so sánh thường dùng trong C.
Toán tử | Ý nghĩa | Ví dụ | Kết quả |
---|---|---|---|
== | Bằng nhau | a == b | True hoặc False |
!= | Không bằng | a != b | True hoặc False |
> | Lớn hơn | a > b | True hoặc False |
< | Nhỏ hơn | a < b | True hoặc False |
>= | Lớn hơn hoặc bằng | a >= b | True hoặc False |
<= | Nhỏ hơn hoặc bằng | a <= b | True hoặc False |
Ví dụ đơn giản
Dưới đây là ví dụ cơ bản về cách sử dụng toán tử so sánh.
int x = 15, y = 20;
// Kiểm tra bằng nhau
if (x == y) {
printf("x bằng yn");
} else {
printf("x không bằng yn");
}
// Kiểm tra nhỏ hơn
if (x < y) {
printf("x nhỏ hơn yn");
}
// Kiểm tra lớn hơn hoặc bằng
if (x >= 10) {
printf("x lớn hơn hoặc bằng 10n");
}
Như vậy, với toán tử so sánh, bạn có thể thực hiện đánh giá điều kiện một cách linh hoạt.
4. Chi tiết từng toán tử và ví dụ mã
4.1 Bằng nhau (==) và Không bằng (!=)
== (Bằng nhau) dùng để so sánh xem hai giá trị có bằng nhau hay không. Kết quả trả về là true (1) hoặc false (0).
!= (Không bằng) dùng để kiểm tra xem hai giá trị có khác nhau hay không.
Ví dụ mã:
#include <stdio.h>
int main() {
int a = 10, b = 20;
// So sánh bằng nhau
if (a == b) {
printf("a bằng bn");
} else {
printf("a không bằng bn");
}
// So sánh không bằng
if (a != b) {
printf("a không bằng bn");
}
return 0;
}
Kết quả xuất ra:
a không bằng b
a không bằng b
Lưu ý:
- Cẩn thận không nhầm
==
với=
. ==
là toán tử so sánh, dùng để đánh giá sự bằng nhau.=
là toán tử gán, dùng để gán giá trị.
4.2 So sánh lớn nhỏ (>, <, >=, <=)
Bốn toán tử so sánh về giá trị gồm:
Toán tử | Ý nghĩa | Ví dụ |
---|---|---|
> | Lớn hơn | a > b |
< | Nhỏ hơn | a < b |
>= | Lớn hơn hoặc bằng | a >= b |
<= | Nhỏ hơn hoặc bằng | a <= b |
Ví dụ mã:
#include <stdio.h>
int main() {
int x = 15, y = 10;
// So sánh lớn nhỏ
if (x > y) {
printf("x lớn hơn yn");
}
if (x < y) {
printf("x nhỏ hơn yn");
}
if (x >= 15) {
printf("x lớn hơn hoặc bằng 15n");
}
if (y <= 10) {
printf("y nhỏ hơn hoặc bằng 10n");
}
return 0;
}
Kết quả xuất ra:
x lớn hơn y
x lớn hơn hoặc bằng 15
y nhỏ hơn hoặc bằng 10
Lưu ý:
- Các phép so sánh lớn nhỏ được dùng rất thường xuyên trong điều kiện rẽ nhánh và vòng lặp.
- Cũng hữu ích cho việc kiểm tra phạm vi giá trị trong hàm.

5. Thứ tự ưu tiên và tính kết hợp của toán tử so sánh
5.1 Thứ tự ưu tiên của toán tử
Khi sử dụng toán tử so sánh, cần hiểu rõ thứ tự ưu tiên và cách kết hợp của chúng.
Các toán tử so sánh có thứ tự ưu tiên như sau:
- Toán tử số học (
+
,-
,*
,/
,%
) - Toán tử so sánh (
>
,<
,>=
,<=
) - Toán tử so sánh bằng (
==
,!=
) - Toán tử logic (
&&
,||
)
Biểu thức được đánh giá theo thứ tự này.
Ví dụ:
if (a + b > c * d) {
printf("Biểu thức đúngn");
}
Trong ví dụ trên, a + b
và c * d
sẽ được tính trước, sau đó mới so sánh bằng >
.
5.2 Tính kết hợp
Tính kết hợp xác định thứ tự đánh giá khi có nhiều toán tử cùng độ ưu tiên.
- Các toán tử so sánh được đánh giá từ trái sang phải.
Ví dụ:
if (a > b && b < c) {
printf("Điều kiện đúngn");
}
Trong trường hợp này, a > b
được đánh giá trước, kết quả của nó sẽ là điều kiện bên trái của &&
.
6. Những điểm cần chú ý
6.1 Nhầm lẫn giữa toán tử gán và toán tử so sánh
Lỗi phổ biến với người mới là nhầm =
với ==
.
Ví dụ sai:
if (a = b) { // Gán giá trị b cho a
printf("Bằng nhau n");
}
Ở đây, a
được gán giá trị b
và kết quả (khác 0) được coi là true.
Ví dụ đúng:
if (a == b) { // So sánh a và b
printf("Bằng nhau n");
}
Mẹo tránh lỗi:
Có thể dùng “Yoda notation” để tránh gõ nhầm.
if (10 == a) { // Yoda notation
printf("Bằng nhau n");
}
Cách này sẽ báo lỗi biên dịch nếu viết nhầm dấu =
, giúp tránh bug.
6.2 Lưu ý khi debug
Để tránh lỗi khi dùng toán tử so sánh, cần:
- Không nhầm toán tử gán và so sánh.
- Luôn kiểm tra dấu
=
và==
.
- Bật cảnh báo trong IDE.
- Bật tùy chọn “Hiển thị tất cả cảnh báo” để phát hiện lỗi tiềm ẩn.
- Dùng công cụ debug.
- Dùng debugger của Visual Studio Code, Code::Blocks để xem giá trị biến.
- Viết unit test.
- Test các nhánh điều kiện trước khi chạy chính thức.

7. FAQ (Câu hỏi thường gặp)
Q1: Khi dùng nhiều điều kiện với toán tử so sánh, cần lưu ý gì?
A: Hãy dùng ngoặc () hợp lý để làm rõ thứ tự đánh giá.
Ví dụ:
int a = 5, b = 10, c = 15;
// Đánh giá an toàn với ngoặc
if ((a < b) && (b < c)) {
printf("a nhỏ hơn b và b nhỏ hơn cn");
}
Lưu ý:
- Dùng ngoặc giúp dễ đọc và an toàn hơn.
- Tránh hiểu nhầm do thứ tự ưu tiên.
Q2: Làm sao so sánh chuỗi trong C?
A: Chuỗi trong C là mảng ký tự, không thể so sánh trực tiếp bằng toán tử so sánh. Hãy dùng hàm strcmp
.
Ví dụ:
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "apple";
char str2[] = "apple";
// So sánh chuỗi
if (strcmp(str1, str2) == 0) {
printf("Chuỗi bằng nhau n");
} else {
printf("Chuỗi khác nhau n");
}
return 0;
}
Kết quả:
Chuỗi bằng nhau
Lưu ý:
strcmp
trả về 0 nếu chuỗi giống nhau.- Nếu muốn bỏ qua phân biệt chữ hoa/thường, có thể dùng
strcasecmp
(tùy hệ thống hỗ trợ).
Q3: Cách tránh lỗi khi debug với toán tử so sánh?
A: Cần:
- Không nhầm dấu
=
và==
. - Bật cảnh báo IDE.
- Dùng công cụ debug.
- Viết unit test.
8. Tóm tắt và câu hỏi ôn tập
Tóm tắt
Toán tử so sánh trong C rất quan trọng để điều khiển điều kiện và vòng lặp. Bài viết đã giải thích cách dùng, ví dụ, thứ tự ưu tiên và các lưu ý.
Điểm chính:
- Hiểu loại và mục đích của từng toán tử.
- Thực hành qua ví dụ mã.
- Không nhầm toán tử gán và so sánh.
- Học thêm mẹo từ phần FAQ.
Câu hỏi ôn tập
Câu 1: Kết quả của đoạn mã sau là gì?
int a = 5, b = 10;
if (a < b && b > 0) {
printf("Điều kiện đúngn");
}
Câu 2: Viết mã dùng strcmp
để so sánh “hello” và “world”.
Gợi ý:
- Ở câu 1, hãy nghĩ cách đánh giá điều kiện.
- Ở câu 2, dùng
strcmp
và kiểm tra kết quả.