Toán hạng

Trong toán học, một **toán hạng** là đối tượng hoặc lượng số mà phép toán đang thực hiện.

## Ví dụ
Biểu thức số học sau đây cho thấy ví dụ của toán tử và toán hạng:

:3 + 6 = 9

Ở ví dụ trên, biểu tượng '+' là dấu hiệu của phép cộng.

**Toán hạng** '3' là một trong những đầu vào (input) và theo sau là toán tử cộng, và toán hạng '6' là một đầu vào khác mà cần thiết cho phép toán.

Kết quả của phép toán là 9. (Số '9' là kết quả của số bị cộng 3 và số cộng 6.)

Vậy, một toán hạng là "một trong những đầu vào (lượng số) cho một phép toán".

## Ghi nhớ

### Biểu thức dưới dạng toán hạng
Toán hạng có thể phức tạp, và có thể bao gồm cả biểu thức được hình thành từ toán tử và toán hạng.

:(3 + 5) \times 2

Ở biểu thức trên, '(3&nbsp;+&nbsp;5)' là toán hạng thứ nhất của phép nhân và '2' là toán hạng thứ hai. Toán hạng '(3&nbsp;+&nbsp;5)' cũng chính là biểu thức, khi mà nó chứa phép cộng có hai toán hạng nữa là '3' và '5'.

### Thứ tự của phép toán

Quy tắc ưu tiên làm ảnh hưởng đến giá trị nào hình thành toán hạng cho toán tử nào:

:3 + 5 \times 2

Ở biểu thức trên, toán tử nhân có độ ưu tiên cao hơn toán tử cộng, nên là toán tử nhân có toán hạng lần lượt là '5' và '2'. Toán tử cộng có toán hạng là '3' và '5&nbsp;×&nbsp;2'.

### Vị trí của toán hạng
Dựa trên các ký hiệu toán học được dùng, vị trí của toán tử đối với toán hạng có thể thay đổi. Ký pháp trung tố (infix notation) được sử dụng rất thông dụng, tuy nhiên các dạng ký pháp khác vẫn tồn tại, như là ký pháp tiền tố và ký pháp hậu tố. Những ký pháp này được dùng rất thông dụng trong khoa học máy tính.

Các biểu thức ở dưới chỉ ra sự khác nhau của các ký pháp — tất cả đều diễn đạt phép cộng của số '1' và '2'

:1 + 2 (ký pháp trung tố)

:+\;1\;2 (ký pháp tiền tố)

:1\;2\;+ (ký pháp hậu tố)

### Trung tố và độ ưu tiên của toán tử

Trong biểu thức toán học, thứ tự của phép toán được thực hiện từ trái sang phải. Bắt đầu từ bên trái và tìm ra toán tử cần thực hiện trước theo độ ưu tiên (đặc biệt là, bắt đầu từ dấu ngoặc đơn và kết thúc ở phép cộng/trừ). Ví dụ, biểu thức sau đây

:4 \times 2^2 - (2 + 2^2),

Phép tính cần được thực hiện đầu tiên là những gì có trong dấu ngoặc đơn. Vì vậy, khi bắt đầu từ trái sang phải, cần tìm phép tính phải được thực hiện đầu tiên (và trong trường hợp này là dấu ngoặc đơn), đó là (2&nbsp;+&nbsp;22). Trong dấu ngoặc đơn lại có biểu thức 22. Người tính toán phải tìm ra giá trị 22 trước khi đi đến bước tiếp theo. Giá trị của 22 là 4. Sau khi có được giá trị này, biểu thức sẽ trở thành:

:4 \times 2^2 - (2 + 4)

Bước tiếp theo là tính toán những gì có trong dấu ngoặc đơn, đó là (2&nbsp;+&nbsp;4)&nbsp;=&nbsp;6. Biểu thức cùa chúng ta sẽ lại trở thành:

:4 \times 2^2 - 6

Sau khi tính toán các giá trị có trong dấu ngoặc đơn, chúng ta sẽ lại bắt đầu từ trái sang phải. Toán tử được ưu tiên tiếp theo (theo quy tắc) sẽ là số mũ. Bắt đầu với giá trị bên trái trước là 4, sau đó hướng mắt về bên phải và tìm giá trị có số mũ. Giá trị đầu tiên và duy nhất mà chúng ta gặp là 22.  Ta tìm được giá trị của 22, là 4. Những gì chúng ta còn lại là biểu thức:

:4 \times 4 - 6.

Tiếp theo là phép nhân. 4&nbsp;×&nbsp;4 là 16. Và biểu thức lại trở thành:

:16 - 6

Phép tính tiếp theo mà cần thực hiện độ ưu tiên là phép chia. Tuy nhiên, không có ký hiệu toán tử chia (÷) trong biểu thức 16&nbsp;−&nbsp;6. Nên chúng ta đến bước tiếp theo của phép tính, là phép cộng và phép trừ, khi chúng có độ ưu tiên bằng nhau và được thực hiện từ trái sang phải.

:16 - 6 = 10.

Vậy giá trị của biểu thức gốc 4&nbsp;×&nbsp;22&nbsp;−&nbsp;(2&nbsp;+&nbsp;22) là 10.

Từ đó, việc xác định thứ tự phép tính rất quan trọng. Nếu người tính toán không thực hiện phép tính theo quy tắc ưu tiên, người tính toán sẽ cho ra giá trị khác. Giá trị khác này  là giá trị sai bởi vì không theo quy ước. Người tính toán chỉ có thể tính ra giá trị đúng khi thực hiện phép tính theo quy tắc ưu tiên.

### Arity
Số lượng toán hạng của một toán tử được gọi là arity. Dựa trên arity, toán tử được phân loại là rỗng nullary (không có toán hạng), một ngôi (1 toán hạng), hai ngôi (2 toán hạng), ba ngôi (3 toán hạng), v.v.

## Khoa học máy tính
Trong ngôn ngữ lập trình máy tính, khái niệm toán tử và **toán hạng** gần như giống trong toán học.

Trong tính toán, một **toán hạng** là một phần của lệnh máy tính trong đó chỉ định dữ liệu nào sẽ được thao tác hoặc vận hành, trong khi đó đồng thời cũng biểu diễn dữ liệu.
Lệnh máy tính mô tả một phép tính có thể là phép cộng hoặc phép nhân X, trong khi một toán hạng (hoặc nhiều hơn) chỉ định X hoạt động hay không cũng như giá trị của X.

Thêm vào đó, trong hợp ngữ (assembly language), một **toán hạng** là giá trị (hoặc argument) mà lệnh vận hành.  Toán hạng có thể là thanh ghi, địa chỉ bộ nhớ, một hằng số theo nghĩa đen, hoặc một nhãn.  Một ví dụ đơn giản (trong kiến trúc x86) là

```asm
MOV DS, AX
```

khi đó giá trị trong toán hạng thanh ghi `AX` sẽ được chuyển đến (`MOV`) bên trong thanh ghi `DS`. Phụ thuộc vào câu lệnh, mà có thể có không, một, hai, hoặc nhiều toán hạng.

## Tham khảo