Phép toán số học và logic

Toán tử số học với số

Có 5 phép toán với số nguyên là + (cộng), - (trừ), * (nhân), / (chia lấy phần nguyên) và phép chia lấy số dư %.

Ví dụ:

1
2
int a = 11 / 2; // -> 5
int b = 11 % 3; // -> 2

Với số thực chỉ có 4 phép toán số học + (cộng), - (trừ), * (nhân), / (chia).

1
double a = 11.0 / 2.0; // -> 5.5

Toán tử gán

Sử dụng = cho phép gán, nếu muốn kết hợp phép gán với các toán tử khác có thể sử dụng toán tử kết hợp +=, -=, *=, /=, %= như sau.

1
2
3
4
5
a += b; // <=> a = a + b;
a -= b; // <=> a = a - b;
a *= b; // <=> a = a * b;
a /= b; // <=> a = a / b;
a %= b; // <=> a = a % b;

Toán tử ++ và –

Toán tử ++ để tăng lên một đơn vị, -- để giảm đi một đơn vị. Có thể sử dụng toán tử này đứng trước hoặc đứng sau tên biến đều được.

1
2
3
4
a++; // <=> a = a + 1;
++a; // <=> a = a + 1;
a--; // <=> a = a - 1;
--a; // <=> a = a - 1;

Hai phép toán với toán tử ++, -- đứng trước hoặc đứng sau tên biến có thể ra hai kết quả khác nhau.
Ví dụ câu lệnh:

1
a = b++; // <=> a = b; b = b + 1;

Câu lệnh này sẽ thực hiện phép gán a = b trước sau đó mới tăng b lên 1.

Còn câu lệnh a = ++b; // <=> b = b + 1; a = b; Câu lệnh này sẽ tăng b lên 1 trước sau đó mới thực hiện phép gán.

Phép toán so sánh

Các phép toán so sánh trả về giá trị logic là đúng (true) hoặc sai (false). Đừng quên rằng số 1 chính là true và số 0 chính là false.

Phép toán Mô tả
== So sánh bằng
!= So sánh khác nhau
< Nhỏ hơn
> Lớn hơn
<= Nhỏ hơn hoặc bằng
>= Lớn hơn hoặc bằng

Sau đây là các ví dụ

1
2
3
(a == 6); // -> true nếu a bằng 6, nếu a khác 6 thì kết quả là false
(6 > 5); // -> true
(6 >= 6); // -> true

Phép toán logic

Có ba phép toán logic đó là ! (phép NOT), && (phép AND) và phép || (phép hoặc). Đầu vào của phép logic là biểu thức logic (true hoặc false), kết quả trả về cũng là true hoặc false.

1
2
3
!1; // -> false
!0; // -> true
(1 && 0); // -> true

Phép AND trả về true khi cả hai biểu thức đều trả về true. Phép OR trả về false khi cả cả hai biểu thức đều trả về false. Chi tiết như sau:

Biểu thức 1 Biểu thức 2 AND OR
true true true true
false false false false
true false false true
false true false true

Toán tử logic trong C có tính chất đánh giá đoản mạch1 như sau

1
2
3
4
5
6
7
8
9
int a = 10;
int b = 0;
int c;
// do b != 0 là false nên cả biểu thức trong if sẽ trả về false
// mặc cho biểu thức (a / b) > 5 có giá trị là bao nhiêu
// vậy nên biểu thức (a / b) > 5 sẽ không được tính
if (b != 0 && (a / b) > 5) { 
  printf("OK");
}

Toán tử điều kiện (hay toán tử 3 ngôi)

Cú pháp toán tử điều kiện như sau:
điều kiện ? biểu thức 1 : biểu thức 2

Nếu điều kiện đúng sẽ lấy giá trị biểu thức 1 còn không sẽ lấy biểu thức 2.
Ví dụ:

1
2
int a = 5, b = 6, c;
c = (a > b) ? a : b; // Nếu a lớn hơn b thì lấy a, còn không thì lấy b.

  1. Đánh giá đoản mạnh (Short-circuit evaluation) là biểu thức thứ hai có thể đánh giá hoặc không tùy vào biểu thức thứ nhất wikipedia. ↩︎