Các toán tử

Ta sẽ tìm hiểu về các toán tử phổ biến trong C++.

Toán tử gán (=)

Toán tử gán (=) gán giá trị cho một biến.

int a = 5;
int b = a;
int c = a * b;

Toán tử toán học (+, -, *, /, %)

Các toán tử toán học sẽ thực hiện các phép tính toán học:

int a = 2, b = 3;
// phép cộng
int c = a + b;
cout << c << '\n'; // 5;

// phép trừ
int d = a - b;
cout << d << '\n'; // -1

// phép nhân
int e = a * b;
cout << e << '\n'; // 6

// phép chia
int f = a / b;
cout << f << '\n'; // 0

// phép modulo
int g = a % b;
cout << g << '\n'; // 2

Đối với phép modulo, nếu thực hiện modulo cho một số âm thì nó sẽ cho ra một số âm thay vì số dương như trong toán học.

int a = -2, b = 3;
cout << (a % b) << '\n';           // -1 thay vì 2
cout << ((a % b) + b) % b << '\n'; // 2

Đối với xâu kí tự, toán tử + được dùng để gán các xâu kí tự lại với nhau.

string a = string("Smol") + ' ' + "Book";    
cout << a << '\n'; // "Smol Book"

Toán tử tăng giảm (++, --)

Đối với những trường hợp cần tăng hoặc giảm một đơn vị giá trị của một biến, thay vì viết x = x + 1 hoặc dùng toán tử hỗn hợp x += 1, ta có thể viết x++.

Việc viết x++++x sẽ khác nhau đôi chút - x++ sẽ trả về cho ta giá trị x và tăng x lên một đơn vị, trong khi ++x trả về cho ta giá trị x + 1 và tăng x lên một đơn vị.

int x = 5;
cout << x++ << '\n'; // 5
// x == 6

cout << ++x << '\n'; // 7
// x == 7

Toán tử so sánh (==, !=, >, <, <=, >=)

Các toán tử so sánh cho ta biết mối quan hệ giữa các giá trị của hai biến. Cụ thể, với hai biến cùng kiểu dữ liệu ab:

Toán tửCông dụng
a == bHai biến có giá trị bằng nhau
a != bHai biến có giá trị khác nhau
a > bBiến a có giá trị lớn hơn biến b
a < bBiến a có giá trị bé hơn biến b
a >= bBiến a có giá trị lớn hơn hoặc bằng biến b
a <= bBiến a có giá trị bé hơn hoặc bằng biến b

Các toán tử này sẽ trả về giá trị \(true/false\). Nếu ta viết 4 < 5 thì nó sẽ trả về \(1\) nghĩa là \(true\), 4 > 5 thì trả về \(0\) nghĩa là \(false\).

Toán tử logic (!, &&, ||)

Các toán từ logic (!, &&, ||) sẽ thực hiện thao tác với các boolean giống với thao tác NOT, ANDOR. Để minh hoạ, ta có hai biến boolean ab.

ab!a!ba && ba || b
truetruefalsefalsetruetrue
truefalsefalsetruefalsetrue
falsetruetruefalsefalsetrue
falsefalsetruetruefalsefalse

Ví dụ:

( (4 < 5) && (5 > 0) )  // (true && true)   => true
( (4 == 5) || (5 < 0) ) // (false || false) => false

Khi sử dụng các toán tử logic, C++ có thể chỉ cần xét các toán tử cần thiết để cho ra đáp án. Ví dụ với thao tác ((4 == 5) && (5 < 0)). Vì C++ kiểm tra (4 == 5) trả về false trước nên nó sẽ trả về thao tác này là false mà không xét (5 < 0)true hay false.

Toán tử thao tác bit (&, |, ^, ~, >>, <<)

Các toán tử thao tác bit (&, |, ^, ~, >>, <<) được sử dụng cho các số nguyên, thực hiện các thao tác bit. Cách các thao tác hoạt động được nói ở phần Thao tác xử lí bit.

int a = 5, b = 7;
cout << (a & b) << '\n';  // 5
cout << (a ^ b) << '\n';  // 2
cout << (7 << 2) << '\n'; // 28

Toán tử hỗn hợp (+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=)

Các toán tử hỗn hợp (+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=) cập nhật các biến bằng một giá trị. Nếu ta viết a += 5, thì nó sẽ tương đương với a = a + 5. Các toán tử khác cũng tương tự.

Toán tử dấu phẩy (,)

Toán tử dấu phẩy (,) kết hợp nhiều phép tính vào một câu lệnh. Nếu ta lấy giá trị của câu lệnh thì giá trị cuối cùng sẽ là giá trị được lấy.

int x;
x = (x = 3, x *= 5, x + 2); // x = 17

Câu lệnh trên có 3 thao tác: gán x = 3, nhân x lên \(5\), vá tính x + 2. Vì x + 2 là thao tác cuối cùng nên giá trị của x sẽ bằng \(17\).