Toán tử số học trong Java | Laptrinhcanban.com

Toán tử số học trong Java

Cùng tìm hiểu về toán tử số học trong Java. Bạn sẽ biết các loại toán tử số hoc, cũng như cách sử dụng chúng để thực hiện các phép toán trong Java sau bài học này.

Toán tử số học trong Java là gì

Toán tử số học trong Java là các toán tử sử dụng để thực hiện các phép tính toán với số trong Java. Có tất cả 5 loại toán tử số học trong Java như bảng sau đây.

Toán tửVí dụÝ nghĩa
+A + BThêm B vào A
-A -BTrừ B cho A
*A * BNhân A với B
/A / BChia A cho B
%A% BDư của phép chia A cho B

Hai giá trị sử dụng trong tính toán với toán tử số học được gọi là toán hạng trong Java. Bằng cách sử dụng toán tử số học, chúng ta có thể tính toán với các toán hạng, cũng như trả về kết quả của phép tính toán đó.

Ví dụ cụ thể, chúng ta sử dụng các toán tử số học để tính toán với các toán hạng là các số nguyên như sau:

num = 10 + 4;   // num = 14
num = 9 - 2; // num = 7
num = 3 * 8; // num = 24
num = 7 / 3; // num = 2
num = 7 % 3; // num = 1

Giống như trên, kết quả của các phép toán sẽ được gán vào biến ở bên trái, thông qua toán tử = trong Java.

Sử dụng toán tử số học trong tính toán số nguyên và số thực

Khi thực hiện phép toán số học trong Java, nếu kiểu của các toán hạng khác nhau thì trước khi tính toán, kiểu giá trị của chúng sẽ được tự động thay đổi, theo quy tắc mà chúng ta đã học trong bài Tự động đổi kiểu dữ liệu khi tính toán trong Java

  1. Nếu có một giá trị thuộc kiểu double, thì giá trị khác kiểu còn lại cũng được chuyển kiểu về double
  2. Nếu có một giá trị thuộc kiểu float, thì giá trị khác kiểu còn lại cũng được chuyển kiểu về float
  3. Nếu có một giá trị thuộc kiểu long, thì giá trị khác kiểu còn lại cũng được chuyển kiểu về long
  4. Nếu không thuộc một trong ba trường hợp trên, thì cả hai giá trị được chuyển về kiểu int

Ví dụ nếu chúng ta thực hiện một phép cộng giữa một số kiểu int với một số kiểu int thì sẽ không xảy ra việc tự động đổi kiểu dữ liệu, và kết quả trả về cũng là một số thuộc kiểu int:

10 + 4;      // 14

Tuy nhiên nếu chúng ta thực hiện phép cộng giữa một số kiểu int với một số kiểu double, thì theo quy tắc đầu tiên chương trình sẽ tự chuyển số kiểu int thành số kiểu double, và sau đó thực hiện phép tính double + double. Và kết quả trả về cũng sẽ là một số thuộc kiểu double:

10 + 4.0;      // 14.0

Đặc biệt lưu ý đối với phép chia trong Java, kết quả của một phép chia số thuộc int với số thuộc int cũng sẽ là một số thuộc int. Do vậy dẫu không phải là phép chia hết thì kết quả trả về cũng chỉ là một số int mà thôi.

System.out.println(10 / 4); //2

Có thể thấy mặc dù phép chia 10 cho 4 bằng 2.5 ở dạng số thực, nhưng do chúng ta đã chia 2 số int cho nhau, nên kết quả cũng sẽ thu về một số nguyên kiểu int mà thôi.

Với các trường hợp khác như chia số int cho số double, hoặc số double cho số int chẳng hạn, do có sự tự chuyển đổi kiểu dữ liệu về kiểu double, nên kết quả trả về số double mà chúng ta mong muốn như sau:

System.out.println(10.0 / 4.0);  // 2.5
System.out.println(10 / 4.0); // 2.5
System.out.println(10.0 / 4); // 2.5

Bởi vậy, trong phép chia số nguyên cho số nguyên, để có thể thu về kết quả mong muốn, chúng ta cần lưu ý phải ép kiểu dữ liệu từ int sang double của một trong hai số nguyên đó, mà bạn đã được học trong bài Ép kiểu dữ liệu trong Java.

double d;
int num1 = 10;
int num2 = 4;

d = num1 / (double)num2; // d = 2.5

Toán tử số học và phép chia số 0 trong Java

Trong toán học, chúng ta đều biết không thể chia cho số 0. Tuy nhiên trong Java, kết quả của việc chia số 0 sẽ rất khác nhau tùy thuộc vào kiểu của toán hạng đã sử dụng để chia.

Khi thực hiện chia hoặc chia lấy dư một số int cho số 0 thông qua các toán tử số học /%, mặc dù khi compile không xảy ra lỗi, nhưng khi chạy chương trình, lỗi java.lang.ArithmeticException: / by zero sẽ trả về như sau:

int i = 10 / 0;  // Error java.lang.ArithmeticException: / by zero
int j = 10 % 0; // Error java.lang.ArithmeticException: / by zero

Còn đối với số thực, ví dụ khi chia hoặc chia lấy dư một số kiểu double cho số 0, thì lỗi sẽ không xảy ra cả khi compile lẫn khi chạy chương trình, nhưng các kết quả Infinity và NaN sẽ được trả về như dưới đây:

double d1 = 10.0 / 0;
System.out.println(d1); // Infinity

double d2 = 10.0 % 0;
System.out.println(d1); // NaN

Do đó chúng ta cần lưu ý tới kiểu của số trong phép chia với số 0 trong Java, để tránh lỗi xảy ra.

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn về toán tử số học trong Java rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về Java trong các bài học tiếp theo.

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.