Phần trước: [C++ Cơ bản] Phần 8: Input và Output (tiếp)
Toán tử (operator) là các ký hiệu nhằm yêu cầu chương trình thực hiện các phép xử lý toán học, logic, vân vân… Toán tử có thể chia làm 6 loại:
- Các kí hiệu phép tính đại số
- Các kí hiệu so sánh
- Các toán tử logic
- Các toán tử trên bit
- Các toán tử gán
- Các toán tử đặc biệt
Bài viết này sẽ đề cập tới ba loại toán tử đầu tiên, đó là các kí hiệu phép tính đại số, các kí hiệu so sánh và các toán tử logic.
Kí hiệu phép tính đại số
Đây là loại kí hiệu gần gũi nhất với chúng ta - chúng chính là các dấu cộng, trừ, nhân, chia hằng ngày, cùng với một vài phép tính nữa.
Giả sử chúng ta có hai giá trị x = 20
và y = 16
. Các phép tính đại số trong C++ bao gồm:
Toán tử | Ý nghĩa | Ví dụ |
---|---|---|
+ |
Cộng | x + y cho ra kết quả 36 |
- |
Trừ | x - y cho ra kết quả 4 |
* |
Nhân | x * y cho ra kết quả 320 |
/ |
Chia. Đối với số nguyên, giá trị trả lại sẽ bằng phần nguyên của kết quả. Đối với số thực, giá trị trả lại sẽ là đầy đủ kết quả. | Nếu như x và y
thuộc kiểu số nguyên, x / y cho ra kết quả
1Nếu như x hoặc y thuộc kiểu số thực, x / y cho ra kết quả 1.25 |
% |
Lấy phần dư của phép chia với số nguyên | x % y cho ra kết quả 4 |
++ |
Phép toán cộng 1 lên đối tượng. Có thể đặt trước, hoặc đặt sau đối tượng, nhưng sẽ có sự khác nhau. | x++ cho ra kết quả 21. Giá trị của x trở thành 21. |
-- |
Phép toán trừ 1 lên đối tượng. Có thể đặt trước, hoặc đặt sau đối tượng, nhưng sẽ có sự khác nhau. | x-- cho ra kết quả 19. Giá trị của x trở thành 19. |
() |
Dấu ngoặc trong phép tính |
Kiểu dữ liệu trong phép tính
C++ sẽ cố gắng chuyển đổi kiểu dữ liệu trong phép toán để tránh sự xung đột trong nội bộ phép
toán (ví dụ khi nhân số nguyên với số thực, nhân giá trị kiểu int
với giá trị kiểu long long int
).
Ví dụ thứ nhất: Chạy chương trình sau đây
#include <iostream>
using namespace std;
int main()
{
int x = 300000;
int y = 200000;
cout << x * y;
return 0;
}
Output
-129542144
Tại sao lại ra kết quả như vậy? Ta thấy trong phép nhân này, các giá trị được sử dụng đều là kiểu
int
- giá trị trả lại sẽ là kiểu int
. Do kết quả giới hạn biểu diễn của int
, phép toán cho ra kết quả sai.
Để cho ra kết quả đúng, ta phải chỉnh lại kiểu dữ liệu của phép toán thành long long int
:
#include <iostream>
using namespace std;
int main()
{
int x = 300000;
long long int y = 200000;
cout << x * y;
return 0;
}
Output
60000000000
Ví dụ thứ hai: Phép chia hai số nguyên
#include <iostream>
using namespace std;
int main()
{
int x = 3;
int y = 2;
cout << x / y;
return 0;
}
Output
1
Lý do kết quả của phép chia chỉ có phần nguyên, là do kiểu dữ liệu của cả hai biến đều là int
, do đó phép chia sẽ trả lại kết quả kiểu int
và bị cắt bỏ phần thập phân.
Để có kết quả có phần thập phân, ta phải thực hiện phép chia có số thực
#include <iostream>
using namespace std;
int main()
{
int x = 3;
double y = 2;
cout << x / y;
return 0;
}
Output
1.5
Phép toán ++
và --
Phép toán ++
và --
cho phép viết tắt phép cộng và trừ 1 một cách nhanh chóng. Hai toán tử này có thể được đặt ở
trước hoặc ở sau giá trị cần thay đổi, tuy nhiên
- Khi đặt trước giá trị cần thay đổi, giá trị của đối tượng sẽ được tăng lên hoặc giảm đi, trước khi mọi phép toán khác diễn ra.
- Khi đặt trước giá trị cần thay đổi, giá trị của đối tượng sẽ được tăng lên hoặc giảm đi, sau khi mọi phép toán khác diễn ra.
Ví dụ minh họa:
#include <iostream>
using namespace std;
int main()
{
int x = 10, y = 10;
// In ra giá trị khi thực hiện phép toán
cout << "Before: x = " << ++ x << "; y = " << y ++ << endl;
// In ra giá trị sau khi thực hiện phép toán
cout << "After: x = " << x << "; y = " << y << endl;
return 0;
}
Output
Before: x = 11; y = 10
After: x = 11; y = 11
Các kí hiệu so sánh
Các toán tử so sánh được dùng để so sánh hai giá trị với nhau. Chúng sẽ trả lại giá trị kiểu
bool
: true
nếu như
mệnh đề là đúng, và false
nếu là sai.
Với hai giá trị x = 20
và y = 16
như trước, ta có:
Toán tử | Ý nghĩa | Ví dụ |
---|---|---|
== |
Bằng nhau | x == y cho ra kết quả false |
!= |
Khác nhau | x != y cho ra kết quả true |
> |
Lớn hơn | x > y cho ra kết quả true |
< |
Nhỏ hơn | < cho ra kết quả false |
>= |
Lớn hơn hoặc bằng | x >= y cho ra kết quả true |
<= |
Nhỏ hơn hoặc bằng | x <= y cho ra kết quả false |
Toán tử logic
Khi ta muốn kết hợp nhiều giá trị bool
lại với nhau - ví
dụ khi ta muốn kiểm tra nếu cả hai mệnh đề đều đúng, hoặc ít nhất một trong hai mệnh đề là đúng,
vân vân… ta sử dụng các phép toán logic.
Với hai giá trị x = 20
và y = 16
như trước, ta có các phép toán logic:
Toán tử | Ý nghĩa | Ví dụ |
---|---|---|
&& (AND) |
Nếu như cả hai mệnh đề đều true , toán tử này trả
lại giá trị true , ngược lại trả lại giá trị false |
(x > 15) && (y > 10) cho ra kết quả
true (x < 15) && (y > 10) cho ra kết quả
false (x < 15) && (y < 10) cho ra kết quả
false |
|| (OR) |
Nếu như có một trong hai mệnh đề là true , toán tử
này trả lại giá trị true , ngược lại trả lại giá trị
false |
(x > 15) || (y > 10) cho ra kết quả true (x < 15) || (y > 10) cho ra kết quả true (x < 15) || (y < 10) cho ra kết quả false |
! (NOT) |
Đảo ngược giá trị của mệnh đề (true trả về false , false trả
về true ) |
!(x > 15) cho ra kết quả false |
Các toán tử so sánh và logic sẽ trở nên vô cùng quan trọng khi ta nghiên cứu tới các lệnh rẽ
nhánh (if/else
) và vòng lặp của chương trình.
Phần sau: [C++ Cơ bản] Phần 10: Toán tử (tiếp)