Toán tử trong C++

1

Nói về toán tử chắc bạn nào cũng đã từng nghe qua mặc dù có học NNLT hay không ^^, nó là một thành phần cực kì quan trọng đến mức không thể thiếu được trong bất cứ NNLT nào. Hầu hết các hàm đều có ít nhất một câu lệnh bắt buộc sử dụng tới toán tử. Tuy nhiên biết về toán tử thôi thì lại chưa đủ, để hiểu rõ hơn chúng ta cần nắm rõ về cả độ ưu tiên và cách kết hợp của chúng. Nắm được các dạng toán tử cùng độ ưu tiên và trật tự kết hợp sẽ giúp cho lập trình viên giải quyết bài toán của mình nhanh chóng và thuận tiện hơn.

 

toán tử trong C++

 

Các loại toán tử ( Không chỉ trong C):

Toán tử được chia thành các nhóm chính:

  • Toán tử số học
  • Toán tử so sánh
  • Toán tử logic
  • Toán tử bitwise
  • Toán tử gán
  • Toán tử hỗn hợp

Bắt đầu nhé, chúng ta sẽ cùng đi tìm hiểu từng loại toán tử một

Toán tử số học

Các toán tử quen thuộc

 

TOÁN TỬ MÔ TẢ
+ Cộng
Trừ
* Nhân
/ Chia
% Chia lấy số dư (chỉ dành cho số nguyên)

Toán tử ++ và —

Đây là hai toán tử một ngôi, hai toán tử này tùy vào vị trí (tiền tố hoặc hậu tố) mà sẽ đưa ra các kết quả khác nhau:

  • Tiền tố (đứng ngay trước tên biến): tăng (nếu là ++) hoặc giảm (nếu là –) giá trị của biến lên 1 đơn vị hoặc trừ đi 1 đơn vị rồi mới thực hiện biểu thức sau đó..
  • Hậu tố (đứng ngay sau tên biến): thực hiện tính toán biểu thức rồi mới tăng (nếu là ++) hoặc giảm (nếu là –)  giá trị của biến lên một.

Ta lấy ví dụ sau:


int main()
{
int x = 10;
int y = 10;

int a, b;
a = ++x; // Tiền tố
b = y++; // Hậu tố

cout << "a = " << a << endl;
cout << "x = " << x << endl;
cout << "b = " << b << endl;
cout << "y = " << y << endl;

return 0;
}

Ta có kết quả xuất ra màn hình như sau:


a = 11
x = 11
b = 10
y = 11

 

Toán tử so sánh
Là các toán tử thường dùng trong các biểu thức đi kèm với các câu lệnh điều kiện.

Tất nhiên là vì là biểu thức so sánh nên nó sẽ trả về kết quả thuộc kiểu logic ví dụ như là true (đúng) hoặc false (sai).

Bao gồm các toán tử sau: ==, !=, >, <, >=, <=.( Mỗi toán tử cách nhau bởi dấu phẩy)

Để cho dễ nhìn thì ad sẽ xét ví dụ sau: giả sử ta có A và B là hai số cần so sánh:

BIỂU THỨC KẾT QUẢ
A == B true nếu A bằng B
A != B true nếu A khác B
A > B true nếu A lớn hơn B
A < B true nếu A bé hơn B
A >= B true nếu A lớn hơn hoặc bằng B
A <= B true nếu A bé hơn hoặc bằng B

 

Toán tử logic

Gồm các phép toán &&, ||, !

Mục đích : Đây là các biểu thức dùng để kết hợp kết quả của các biểu thức so sánh (các biểu thức sử dụng toán tử so sánh) để trả về các kết quả logic là true hoặc false.

Giả sử ta có X và Y là hai biểu thức so sánh:

BIỂU THỨC KẾT QUẢ
X && Y true nếu X true và Y true
X || Y true nếu X true hoặc Y true
!Y true nếu X false

Lưu ý: trong trường hợp X hoặc Y là 2 số, biểu thức vẫn thực hiện được, với quy ước: 0 tương đương với false, các số khác 0 tương đương với true.

Toán tử bitwise

Là các toán tử xử lý tính toán liên quan đến các dãy bit nhị phân.

Toán tử &, |, ^

Đây là các toán tử 2 ngôi với 2 số hạng là 2 dãy bit

  • &: đọc là AND, kết quả của biểu thức là 1 nếu cả 2 bit số hạng là 1, ngược lại kết quả là 0.
  • | : đọc là OR, kết quả của biểu thức là 1 nếu một trong 2 bit số hạng là 1, ngược lại kết quả là 0.
  • ^: đọc là XOR, kết quả của biểu thức là 1 nếu 2 bit số hạng khác nhau, ngược lại kết quả là 0.

Ví dụ ta có p và q là 2 bit cần đưa vào tính toán, ad có bảng sau:

p

q  p & q p | q p ^ q
    0       0         0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1

0

Toán tử dịch bit

Gồm 2 toán tử là << và >> (khác với << trong của cout và >> của cin)

  • A << n: kết quả thu được là dãy bit A đã dịch sang trái n bit, dễ hiểu hơn, kết quả là dãy bit A bỏ đi n bit bên trái cùng và thêm n bit 0 vào bên phải cùng.
  • A >> n: kết quả thu được là dãy bit A đã dịch sang phải n bit, dễ hiểu hơn, kết quả là dãy bit A bỏ đi n bit bên phải cùng và thêm n bit 0 vào bên trái cùng.

Toán tử ~

~ (đọc là NOT) là toán tử một ngôi, tiền tố, kết quả thu được là dãy bit bị đổi 0 thành 1 và 1 thành 0 so với dãy bit ban đầu

Ví dụ tổng quát cho các toán tử bitwise

Ta có khai báo:


char A = 71;
char B = 19;
char Result;

Chuyển A và B thành các dãy bit:

A = 00100111

B = 00010011

Nếu:


Result = A &amp; B // Result = 00000011
Result = A | B // Result = 00110111
Result = A ^ B // Result = 00110100
Result = A &lt;&lt; 3 // Result = 00111000
Result = A &gt;&gt; 3 // Result = 00000100
Result = ~A // Result = 11011000

Toán tử gán

Là các toán tử cho phép bạn thực hiện các phép như gán giá trị và các phép toán đi với phép gán đó, bao gồm =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=

Trong đó:

  • = là toán tử gán thông thường, giá trị bên phải vào biến bên trái.
  • Các toán tử còn lại: giả sử ta có biểu thức A += B, thì biểu thức này tương đương với A = A + B. Các toán tử còn lại hoàn toàn tương tự.

Toán tử hỗn hợp

Là các toán tử được C++ hỗ trợ thêm như sizeof, chuyển kiểu, ->, new, delete… Các toán tử dạng này sẽ được đề cập rõ hơn ở các bài viết sau.

Độ ưu tiên và trật tự kết hợp

Trong một biểu thức sử dụng nhiều toán tử, thì mỗi loại toán tử sẽ có độ ưu tiên khác nhau, toán tử có độ ưu tiên lớn hơn sẽ được tính toán trước, khi các toán tử có độ ưu tiên ngang hàng, thì sẽ tính toán theo thứ tự từ trái sang phải hoặc từ phải sang trái, tùy thuộc vô nhóm toán tử. Các bạn cần nắm rõ để thực hiện được chính xác các phép toán trên C++

Ta có bảng chi tiết sau, độ ưu tiên sẽ giảm dần theo thứ tự từ trên xuống dưới:

ĐỘ ƯU TIÊN NHÓM TOÁN TỬ TOÁN TỬ THỨ TỰ THỰC HIỆN
1 Phạm vi :: Trái sang phải
2 Hậu tố (một ngôi) ++ — Trái sang phải
( )
[ ]
. ->
3 Tiền tố (một ngôi) ++ — Phải sang trái
~ !
+ –
& *
new detete
sizeof
(type)
4 Trỏ tới thành viên .* ->* Trái sang phải
5 Số học: tỉ lệ * / % Trái sang phải
6 Số học: tăng giảm + – Trái sang phải
7 Dịch bit << >> Trái sang phải
8 So sánh hơn < > <= >= Trái sang phải
9 So sánh bằng == != Trái sang phải
10 Bitwise AND & Trái sang phải
11 Bitwise XOR ^ Trái sang phải
12 Bitwise NOT | Trái sang phải
13 Logical AND && Trái sang phải
14 Logical OR || Trái sang phải
15 Gán = *= /= %= += -= &= |= ^= >>= <<= Phải sang trái
?:
16 Sắp xếp , Trái sang phải

 

1 Comment
  1. […] Toán tử trong C++ […]

Leave A Reply

Your email address will not be published.