Nội dung chính
1. Toán tử số học đơn phương
Có hai toán tử số học đơn nguyên, cộng (+) và trừ (-). Xin nhắc lại, các toán tử đơn nguyên là các toán tử chỉ lấy một toán hạng.
Operator | Symbol | Form | Operation |
---|---|---|---|
Unary plus | + | +x | x là số dương |
Unary minus | – | -x | x là số âm |
Toán tử trừ đơn nguyên trả về toán hạng nhân với -1. Nói cách khác, nếu x = 5, -x là -5.
Toán tử unary plus trả về giá trị của toán hạng. Nói cách khác, +5 là 5 và + x là x. Nói chung, Nó đã được thêm vào phần lớn để cung cấp tính đối xứng với toán tử trừ đơn nguyên.
Để có hiệu quả tốt nhất, cả hai toán tử này phải được đặt ngay trước toán hạng (ví dụ: -x, không phải – x).
Đừng nhầm lẫn toán tử trừ đơn nguyên với toán tử trừ nhị phân, sử dụng cùng một ký hiệu. Ví dụ, trong biểu thức x = 5 – -3; điểm trừ đầu tiên là toán tử trừ nhị phân và thứ hai là toán tử trừ đơn phương.
2. Toán tử số học nhị phân
Có 5 toán tử số học nhị phân. Toán tử nhị phân là toán tử lấy toán hạng trái và phải.
Operator | Symbol | Form | Operation |
---|---|---|---|
Addition | + | x + y | x cộng y |
Subtraction | – | x – y | x trừng y |
Multiplication | * | x * y | x nhân y |
Division | / | x / y | x chia y |
Modulus (Remainder) | % | x % y | x chia y lấy dư |
Các toán tử cộng, trừ và nhân hoạt động giống như chúng làm trong cuộc sống thực, không có sự cẩn thận.
3. Số nguyên và phép chia dấu phẩy động
Dễ dàng nhất khi nghĩ về toán tử phân chia là có hai chế độ khác nhau.
Nếu một trong hai (hoặc cả hai) toán hạng là giá trị dấu phẩy động, toán tử chia thực hiện phép chia dấu phẩy động. Phân chia điểm nổi trả về giá trị dấu phẩy động và phân số được giữ. Ví dụ: 7.0 / 4 = 1.75, 7 / 4.0 = 1.75 và 7.0 / 4.0 = 1.75. Như với tất cả các phép toán số học dấu phẩy động, lỗi làm tròn có thể xảy ra.
Nếu cả hai toán hạng là số nguyên, toán tử chia thực hiện phép chia số nguyên thay thế. Phân chia số nguyên giảm bất kỳ phân số và trả về một giá trị số nguyên. Ví dụ: 7/4 = 1 vì phần phân số của kết quả bị loại bỏ. Tương tự, -7 / 4 = -1 vì phân số bị giảm.
Cảnh báo
Trước C ++ 11, phép chia số nguyên với toán hạng âm có thể làm tròn lên hoặc xuống. Do đó -5 / 3 có thể dẫn đến -1 hoặc -2. Điều này đã được sửa trong C ++ 11, nó luôn giảm phân số (làm tròn về 0)
4. Sử dụng static_cast <> để thực hiện phép chia dấu phẩy động với số nguyên
Những điều trên đặt ra câu hỏi – nếu chúng ta có hai số nguyên và muốn chia chúng mà không mất phân số, chúng ta sẽ làm như thế nào?
Trong bài Chars, chúng ta đã chỉ ra cách chúng ta có thể sử dụng toán tử static_cast <> để chuyển đổi một char thành một số nguyên để nó sẽ in dưới dạng một số nguyên thay vì một ký tự.
Chúng ta có thể sử dụng tương tự static_cast <> để chuyển đổi một số nguyên thành số dấu phẩy động để chúng ta có thể thực hiện phép chia dấu phẩy động thay vì chia số nguyên. Hãy xem xét các code sau đây:
/**
* Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
*
* @author cafedevn
* Contact: cafedevn@gmail.com
* Fanpage: https://www.facebook.com/cafedevn
* Instagram: https://instagram.com/cafedevn
* Twitter: https://twitter.com/CafedeVn
* Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/
#include <iostream>
int main()
{
int x{ 7 };
int y{ 4 };
std::cout << "int / int = " << x / y << "\n";
std::cout << "double / int = " << static_cast<double>(x) / y << "\n";
std::cout << "int / double = " << x / static_cast<double>(y) << "\n";
std::cout << "double / double = " << static_cast<double>(x) / static_cast<double>(y) << "\n";
return 0;
}
Điều này tạo ra kết quả:
int / int = 1
double / int = 1.75
int / double = 1.75
double / double = 1.75
Trên đây minh họa rằng nếu một trong hai toán hạng là số dấu phẩy động thì kết quả sẽ là phép chia dấu phẩy động, không phải là phép chia số nguyên.
5. Chia cho số không
Cố gắng chia cho 0 (hoặc 0,0) thường sẽ khiến chương trình của bạn bị thoát, vì kết quả không được xác định về mặt toán học!
/**
* Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
*
* @author cafedevn
* Contact: cafedevn@gmail.com
* Fanpage: https://www.facebook.com/cafedevn
* Instagram: https://instagram.com/cafedevn
* Twitter: https://twitter.com/CafedeVn
* Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/
#include <iostream>
int main()
{
std::cout << "Enter a divisor: ";
int x{};
std::cin >> x;
std::cout << "12 / " << x << " = " << 12 / x << '\n';
return 0;
}
Nếu bạn chạy chương trình trên và nhập 0, chương trình của bạn sẽ bị sập hoặc chấm dứt bất thường. Hãy tiếp tục và thử nó, nó đã giành được hại cho máy tính của bạn.
6. Toán tử gán số học
Operator | Symbol | Form | Operation |
---|---|---|---|
Assignment | = | x = y | Gán gía trị của y cho x |
Addition assignment | += | x += y | Cộng y cho x |
Subtraction assignment | -= | x -= y | Trừ y cho x |
Multiplication assignment | *= | x *= y | Nhân x với y |
Division assignment | /= | x /= y | Chia x với y |
Modulus assignment | %= | x %= y | Chia x với y và lấy dư |
Tính đến thời điểm này, khi bạn cần thêm 4 vào một biến, bạn có thể thực hiện các thao tác sau:
x = x + 4; // add 4 to existing value of x
Điều này hoạt động, nhưng nó có một chút lộn xộn và cần hai toán tử để thực thi (toán tử + và toán tử =).
Vì viết các câu lệnh như x = x + 4 rất phổ biến, C ++ cung cấp năm toán tử gán số học cho thuận tiện. Thay vì viết x = x + 4, bạn có thể viết x + = 4. Thay vì x = x * y, bạn có thể viết x * = y.
Do đó, những điều trên trở thành:
x += 4; // add 4 to existing value of x