Toán tử và Biểu thức

75
Toán tử và Biểu thức - 01

Mục tiêu

– Hiểu được toán tử gán
– Hiểu được biểu thức số học
– Nắm được toán tử quan hệ và luận lý (Relational and Logical Operators)
– Nắm được toán tử luận lý nhị phân và biểu thức (Bitwise Logical Operators and Expression)
– Hiểu được khái niệm ép kiểu (Cast)
– Hiểu được độ ưu tiên của các toán tử

Biểu thức (Expressions)

– Sự kết hợp các toán tử và các toán hạng
Ví dụ:
Toán tử và Biểu thức - 01

 

Toán tử gán

– Toán tử gán (=) có thể được dùng với bất kỳ biểu thức C hợp lệ nào

Toán tử và Biểu thức - 02
Gán liên tiếp

– Nhiều biến có thể được gán với cùng một giá trị trong một câu lệnh đơn
Toán tử và Biểu thức - 03

– Tuy nhiên, không thể áp dụng quy tắc trên khi khai báo biến
Toán tử và Biểu thức - 04

Bốn Kiểu Toán Tử

Toán tử và Biểu thức - 05
Biểu thức số học

– Biểu thức số học có thể được biểu diễn trong C bằng cách sử dụng các toán tử số học
Ví dụ :

++i % 7
 
5 + (c = 3 + 8) 
a * (b + c/d) - 22 

Toán tử quan hệ và luận lý

Ðược dùng để: Kiểm tra mối quan hệ giữa hai biến hay giữa một biến và một hằng​

Toán tử quan hệ

Toán tử và Biểu thức - 06

Toán tử luận lý

là những ký hiệu dùng để kết hợp hay phủ định biểu thức chứa các toán tử quan hệ

ví dụ:

if (a>10) && (a<20)

Những biểu thức dùng toán tử luận lý trả về 0 thay cho false và 1 thay cho true

Toán tử luận lý nhị phân

– Dữ liệu chỉ được xử lý sau khi đã chuyển đổi giá trị SỐ thành giá trị NHỊ PHÂN
Toán tử và Biểu thức - 07

Ví dụ:
Toán tử và Biểu thức - 09

Chuyển đổi kiểu

– Qui tắc chuyển đổi kiểu tự động trình bày dưới đây nhằm xác định giá trị biểu thức:
a. char và short được chuyển thành int và float được chuyển thành double.
b. Nếu có một toán hạng là double, toán hạng còn lại sẽ được chuyển thành double, và kết quả là double.
c. Nếu có một toán hạng là long, toán hạng còn lại sẽ được chuyển thành long, và kết quả là long.
d. Nếu có một toán hạng là unsigned, toán hạng còn lại sẽ được chuyển thành unsigned và kết quả cũng là unsigned.
e. Nếu tất cả toán hạng kiểu int, kết quả là int.​
Ví dụ:
Toán tử và Biểu thức - 10

Ép kiểu

– Một biểu thức được ép thành một kiểu nhất định bằng cách dùng kỹ thuật ép kiểu (cast).
Cú pháp :
(kiểu dữ liệu) cast
Kiểu -> Bất cứ kiểu dữ liệu hợp lệ trong C
Toán tử và Biểu thức - 11

Độ ưu tiên của toán tử

– Độ ưu tiên tạo nên cấu trúc phân cấp của loại toán tử này so với loại toán tử khác khi tính giá trị một biểu thức số học
– Nó đề cập đến thứ tự thực thi các toán tử trong C
– Độ ưu tiên của các toán tử này được thay đổi bởi các dấu ngoặc đơn trong biểu thức

Toán tử và Biểu thức - 12

Ví dụ:

-8 * 4 % 2 - 3

Toán tử và Biểu thức - 13
Độ ưu tiên của toán tử so sánh

– Độ ưu tiên của toán tử so sánh (quan hệ) luôn được tính từ trái sang phải
Toán tử và Biểu thức - 14

Độ ưu tiên của toán tử luận lý

Toán tử và Biểu thức - 15

– Khi có nhiều toán tử luận lý trong một điều kiện, ta áp dụng quy tắc tính từ phải sang trái

Xét biểu thức sau:

False OR True AND NOT False AND True

Ðiều kiện này được tính như sau:

False OR True AND [NOT False] AND True

NOT có độ ưu tiên cao nhất.

False OR True AND [True AND True]

Ở đây, AND có độ ưu tiên cao nhất, những toán tử có cùng ưu tiên được tính từ phải sang trái.


False OR [True AND True]
[False OR True]
True

Độ ưu tiên giữa các toán tử

– Khi một biểu thức có nhiều loại toán tử thì độ ưu tiên giữa chúng phải được thiết lập.
Toán tử và Biểu thức - 16

Ví dụ:

2*3+4/2 > 3 AND 3<5 OR 10<9

Việc tính toán như sau:

[2*3+4/2] > 3 AND 3<5 OR 10<9

Toán tử số học sẽ được tính trước

[[2*3]+[4/2]] > 3 AND 3<5 OR 10<9
[6+2] >3 AND 3<5 OR 10<9
[8 >3] AND [3<5] OR [10<9]

Kế đến là toán tử so sánh có cùng độ ưu tiên. Ta áp dụng quy tắc tính từ trái sang phải.

True AND True OR False

Cuối cùng là toán tử kiểu luận lý. AND sẽ có độ ưu tiên cao hơn OR

[True AND True] OR False
True OR False
True

Thay đổi độ ưu tiên

– Dấu ngoặc đơn ( ) có độ ưu tiên cao nhất
– Độ ưu tiên của các toán tử có thể được thay đổi bởi dấu ngoặc đơn
– Toán tử có độ ưu tiên thấp hơn nếu đặt trong dấu ngoặc đơn sẽ được thực thi trước
– Khi các cặp ngoặc đơn lồng nhau ( ( ( ) ) ), cặp ngoặc đơn trong cùng nhất sẽ được thực thi trước
– Nếu trong biểu thức có nhiều cặp ngoặc đơn thì việc thực thi sẽ theo thứ tự từ trái sang phải

Ví dụ:

5+9*3^2-4 > 10 AND (2+2^4-8/4 > 6 OR (2<6 AND 10>11))

Cách tính:

5+9*3^2-4 > 10 AND (2+2^4-8/4 > 6 OR (True AND False))

Dấu ngoặc đơn bên trong sẽ được tính trước

5+9*3^2-4 > 10 AND (2+2^4-8/4 > 6 OR False)
5+9*3^2-4 >10 AND (2+16-8/4 > 6 OR False)

Kế đến dấu ngoặc đơn ở ngoài được tính đến

5+9*3^2-4 > 10 AND (2+16-2 > 6 OR False)
5+9*3^2-4 > 10 AND (18-2 > 6 OR False)
5+9*3^2-4 > 10 AND (True OR False)
5+9*3^2-4 > 10 AND True
5+9*9-4>10 AND True

Biểu thức bên trái được tính trước

5+81-4>10 AND True
86-4>10 AND True
82>10 AND True
True AND True
True