Search…

Toán Tử - Độ Ưu Tiên và Trật Tự Kết Hợp

20/09/20206 min read
Giới thiệu các loại toán tử, độ ưu tiên và trật tự kết hợp toán tử

Toán tử - Thành phần không thể thiếu trong bất cứ ngôn ngữ lập trình nào, hầu hết các hàm đều có ít nhất một câu lệnh sử dụng tới toán tử. 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 hơn.

Các loại toán tử

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

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 rồi mới thực hiện tính toán trong biểu thức.
  • 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.

Ví dụ:

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;
}

Kết quả xuất ra màn hình:

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.

Biểu thức chứa phép toán so sánh sẽ trả về kết quả logic là true (đúng) hoặc false (sai).

Bao gồm các toán tử sau: ==, !=, >, <, >=, <=.

Giả sử có AB 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 &&, ||, !

Đâ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ử có XY 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ụ có p và q là 2 bit cần đưa vào tính toán:

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à <<>> (khác với << trong của cout>> 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.

Khai báo:

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

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

A = 01000111
B = 00010011

Nếu:

Result = A & B   // Result = 00000011
Result = A | B   // Result = 01010111 
Result = A ^ B   // Result = 01010100
Result = A << 3  // Result = 00111000
Result = A >> 3  // Result = 00000010
Result = ~A      // Result = 10111000

Toán tử gán

Là các toán tử thực hiện phép gán và có thể thực hiện biểu thức đi kèm với phép gán đó, bao gồm =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=

Trong đó:

  • =: toán tử gán, gán biến bên trái bằng với giá trị của biểu thức bên phải.
  • Các toán tử còn lại: giả sử 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… 

Độ ư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ử.

Bảng độ ưu tiên của toán tử, mức độ ư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
IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024