Tổng Quan Về Hệ Thống Toán Tử Và Biểu Thức Trong C

Toán Tử Số Học

Trong ngôn ngữ C, các phép tính toán học cơ bản được thực hiện thông qua một bộ ký hiệu đặc biệt. Dưới đây là các toán tử thường dùng nhất để xử lý dữ liệu số:

Ký hiệu Chức năng Cú pháp Ghi chú
+ Cộng x + y Tổng của hai toán hạng
- Trừ x - y Hiệu giữa hai toán hạng
* Nhân x * y Tích của hai toán hạng
/ Chia x / y Thương (với số nguyên sẽ làm tròn xuống)
% Chia lấy dư x % y Phần dư (chỉ áp dụng cho số nguyên)

Thứ tự ưu tiên

Khi một biểu thức chứa nhiều toán tử, thứ tự thực hiện sẽ tuân theo quy tắc ưu tiên sau:

  • Mức cao: *, /, % (thực hiện từ trái sang phải)
  • Mức thấp: +, - (thực hiện từ trái sang phải)

Lập trình viên có thể sử dụng dấu ngoặc đơn () để thay đổi thứ tự ưu tiên mặc định này.

Phép chia số nguyên và số thực

Kết quả của phép chia phụ thuộc vào kiểu dữ liệu của toán hạng. Nếu cả hai đều là số nguyên, phần thập phân sẽ bị loại bỏ.

#include <stdio.h>

int main() {
    int soNguyenA = 9, soNguyenB = 4;
    float soThucX = 9.0, soThucY = 4.0;

    printf("Chia nguyên: %d\n", soNguyenA / soNguyenB);   // Ket qua: 2
    printf("Chia thuc: %f\n", soThucX / soThucY);         // Ket qua: 2.250000

    return 0;
}

Toán tử tăng giảm

Các toán tử ++-- dùng để tăng hoặc giảm giá trị biến lên 1 đơn vị. Vị trí đặt toán tử (trước hoặc sau biến) sẽ ảnh hưởng đến thời điểm giá trị được cập nhật.

Dạng Ý nghĩa Ví dụ
Tăng dần Cộng thêm 1 ++k hoặc k++
Giảm dần Trừ đi 1 --k hoặc k--
  • Hậu tố (k++): Sử dụng giá trị hiện tại trước, sau đó mới tăng.
  • Tiền tố (++k): Tăng giá trị trước, sau đó mới sử dụng.
#include <stdio.h>

int main() {
    int dem = 10, ketQua;

    // Hau to: lay gia tri cu roi tang
    ketQua = dem++;
    printf("Sau hau tang: Ket qua = %d, Dem = %d\n", ketQua, dem); 

    dem = 10; // Dat lai
    // Tien to: tang roi lay gia tri moi
    ketQua = ++dem;
    printf("Sau tien tang: Ket qua = %d, Dem = %d\n", ketQua, dem);

    return 0;
}

Lưu ý: Không thể thực hiện phép chia cho 0. Toán tử lấy dư % không áp dụng được cho số thực (float/double).

Toán Tử Gán

Toán tử gán cơ bản = dùng để lưu trữ một giá trị vào biến. Ngoài ra, C还支持 các dạng gán kết hợp để viết code ngắn gọn hơn.

Gán kết hợp (Compound Assignment)

Các phép toán như cộng, trừ, nhân, chia có thể kết hợp trực tiếp với việc gán giá trị.

Toán tử Cú pháp rút gọn Tương đương
+= tong += 5 tong = tong + 5
-= tien -= 2 tien = tien - 2
*= gia *= 3 gia = gia * 3
/= so /= 2 so = so / 2
%= du %= 4 du = du % 4
#include <stdio.h>

int main() {
    int taiKhoan = 100;

    taiKhoan += 50;  // Cong them 50
    taiKhoan -= 20;  // Tru di 20
    taiKhoan *= 2;   // Nhan doi

    printf("So du cuoi cung: %d\n", taiKhoan); // 260

    return 0;
}

Vế trái của phép gán bắt buộc phải là một biến (l-value). Các hằng số hoặc biểu thức tính toán không thể đứng ở vị trí này.

Toán Tử Quan Hệ

Để so sánh giá trị giữa các biến, C sử dụng nhóm toán tử quan hệ. Kết quả trả về là số nguyên: 1 (đúng) hoặc 0 (sai).

Ký hiệu Ý nghĩa Ví dụ
== Bằng nhau a == b
!= Khác nhau a != b
> 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
#include <stdio.h>

int main() {
    int chieuCao = 170, yeuCau = 160;
    int datChuan = chieuCao >= yeuCau;

    printf("Kiem tra chieu cao (1=Dat, 0=Khong): %d\n", datChuan);

    return 0;
}

Cần phân biệt rõ giữa = (gán) và == (so sánh). Việc nhầm lẫn hai ký hiệu này trong câu điều kiện là lỗi phổ biến gây ra hành vi không mong muốn.

Toán Tử Logic

Khi cần kết hợp nhiều điều kiện lại với nhau, các toán tử logic sẽ được sử dụng. Chúng hoạt động dựa trên giá trị đúng/sai của biểu thức.

Toán tử Tên gọi
&& AND (Và) Đúng khi cả hai vế đều đúng
|| OR (Hoặc) Đúng khi ít nhất một vế đúng
! NOT (Phủ định) Đảo ngược trạng thái đúng/sai

Nguyên lý đoản mạch (Short-circuit)

Trình biên dịch sẽ tối ưu hóa việc đánh giá biểu thức logic:

  • Với &&: Nếu vế trái sai, vế phải sẽ không được kiểm tra.
  • Với ||: Nếu vế trái đúng, vế phải sẽ không được kiểm tra.
#include <stdio.h>

int main() {
    int soA = 10, soB = 0;

    // Neu soB == 0, phep chia se bo qua nho co che doan mach
    if (soB != 0 && soA / soB > 5) {
        printf("Thoa man dieu kien\n");
    } else {
        printf("Khong thoa man hoac chia cho 0\n");
    }

    return 0;
}

Toán Tử Điều Kiện (Ternary)

Đây là toán tử duy nhất có ba toán hạng trong C, thường dùng để thay thế cho cấu trúc if-else đơn giản nhằm gán giá trị.

Cú pháp: DieuKien ? GiaTriNeuĐung : GiaTriNeuSai;

#include <stdio.h>

int main() {
    int diemThi = 7;
    char const* ketQua = (diemThi >= 5) ? "Dat" : "Khong Dat";

    printf("Ket qua hoc tap: %s\n", ketQua);

    return 0;
}

Toán tử này có thể lồng nhau để xử lý nhiều trường hợp, tuy nhiên việc lạm dụng sẽ làm giảm khả năng đọc hiểu của mã nguồn.

Chuyển Đổi Kiểu Dữ Liệu

Trong quá trình tính toán, các biến có kiểu dữ liệu khác nhau có thể cần được chuyển đổi để tương thích.

Chuyển đổi ngầm định (Implicit)

Hệ thống tự động nâng cấp kiểu dữ liệu nhỏ lên kiểu lớn hơn để tránh mất mát thông tin (ví dụ: từ int lên float).

Chuyển đổi tường minh (Explicit Casting)

Lập trình viên chủ động ép kiểu bằng cú pháp (KieuMoi) Bien. Điều này thường dùng khi muốn ưu tiên độ chính xác hoặc ép về kiểu nhỏ hơn.

#include <stdio.h>

int main() {
    int tuSo = 7, mauSo = 2;

    // Khong ep kieu: ket qua la so nguyen
    float ketQua1 = tuSo / mauSo; 

    // Ep kieu sang float: ket qua la so thuc
    float ketQua2 = (float)tuSo / mauSo;

    printf("Khong ep: %f\n", ketQua1); // 3.000000
    printf("Co ep: %f\n", ketQua2);    // 3.500000

    return 0;
}
Phương thức Kiểm soát Rủi ro
Ngầm định Tự động Có thể gây mất độ chính xác nếu không chú ý
Tường minh Thủ công Có thể gây tràn số hoặc mất dữ liệu nếu ép kiểu không phù hợp

Thẻ: C-Language Operators type-casting arithmetic-operations logical-expressions

Đăng vào ngày 1 tháng 6 lúc 10:34