1. Panimula
Ang precedence ng mga operator sa wikang C ay napakahalaga para sa tamang pag-unawa sa pag-uugali ng programa at upang makamit ang inaasahang resulta. Ang maling interpretasyon sa pagkakasunod-sunod ng pag-evaluate ay madaling magdulot ng hindi inaasahang resulta o bug. Sa artikulong ito, ipapaliwanag natin nang detalyado ang mga patakaran ng precedence at associativity ng mga pangunahing operator sa C, kasama ang mga konkretong halimbawa upang mapalalim ang iyong pag-unawa.
2. Mga Uri ng Operator at Pangunahing Paggamit
2.1 Mga Arithmetic Operator
Ang mga arithmetic operator ay mga pangunahing kasangkapan para sa pagsasagawa ng mga kalkulasyon gamit ang mga numero. Madalas gamitin ang mga ito sa mga programa, kaya mahalagang maunawaan nang mabuti ang mga batayan.
+(Addition): Nagdadagdag ng dalawang numero.-(Subtraction): Nagbabawas ng isang numero mula sa isa.*(Multiplication): Nagmumultiply ng dalawang numero./(Division): Hinahati ang isang numero sa isa pa (kapag naghahati ng mga integer, ang resulta ay tinatanggal ang fractional part).%(Modulus): Nagbabalik ng natitirang bahagi ng operasyon ng paghahati.
Example:
int a = 10, b = 3;
int sum = a + b; // 13
int diff = a - b; // 7
int prod = a * b; // 30
int quot = a / b; // 3
int rem = a % b; // 1
2.2 Mga Operator ng Paghahambing
Ang mga comparison operator ay naghahambing ng dalawang halaga at nagbabalik ng true (1) o false (0). Kadalasang ginagamit ang mga ito sa mga conditional statement at loop.
>(Greater than): Totoo kung ang kaliwang halaga ay mas malaki kaysa sa kanan.<(Less than): Totoo kung ang kaliwang halaga ay mas maliit kaysa sa kanan.>=(Greater than or equal to): Totoo kung ang kaliwang halaga ay mas malaki o katumbas ng kanan.<=(Less than or equal to): Totoo kung ang kaliwang halaga ay mas maliit o katumbas ng kanan.==(Equal to): Totoo kung magkapareho ang dalawang halaga.!=(Not equal to): Totoo kung magkaiba ang mga halaga.int a = 5, b = 10; if (a < b) { printf("a is less than bn"); // This will be printed }

3. Precedence ng Operator at Associativity
3.1 Precedence ng Operator
Ang precedence ng operator ay tumutukoy kung aling mga operasyon ang isasagawa muna sa mga expression na may maraming operator. Narito ang isang bahagyang listahan ng precedence ng mga operator sa C, mula pinakamataas hanggang pinakamababa.
| Precedence | Operator | Description |
|---|---|---|
| 1 | () [] -> . | Function call, array access, pointer member |
| 2 | ++ -- | Postfix increment/decrement |
| 3 | ++ -- | Prefix increment/decrement, unary operators |
| 4 | * / % | Multiplication, division, modulus |
| 5 | + - | Addition, subtraction |
| 6 | << >> | Bitwise shift |
| 7 | < <= > >= | Relational operators |
| 8 | == != | Equality, inequality |
| 9 | & | Bitwise AND |
| 10 | ^ | Bitwise XOR |
| 11 | | | Bitwise OR |
| 12 | && | Logical AND |
| 13 | || | Logical OR |
| 14 | ? : | Ternary (conditional) operator |
| 15 | = += -= | Assignment, compound assignment |
| 16 | , | Comma operator |
3.2 Associativity
Ang associativity ay tumutukoy sa direksyon ng pag-evaluate kapag maraming operator na may parehong precedence ang lumilitaw sa isang expression. Karamihan sa mga operator ay left-associative, ngunit ang ilan (tulad ng assignment at conditional operators) ay right-associative.
- Left-associative : Ang mga operator ng
*,+,-ay sinusuri mula kaliwa papuntang kanan. - Right-associative : Ang mga operator ng assignment at conditional
? :ay sinusuri mula kanan papuntang kaliwa.int a = 5, b = 10, c = 15; int result = a - b + c; // Left-associative: (a - b) + c = 0
4. Mga Babala Hinggil sa Precedence ng mga Tiyak na Operator
4.1 Mga Logical Operator
Ang Logical AND (&&) at Logical OR (||) ay ginagamit upang pagsamahin ang mga kondisyon, ngunit mas mataas ang precedence ng && kaysa sa ||. Maaari itong magdulot ng kalituhan sa code tulad ng sumusunod:
int a = 1, b = 0, c = 1;
if (a && b || c) {
printf("Truen"); // This will be printed
}
Sa halimbawang ito, unang ine-evaluate ang a && b, at pagkatapos ay pinagsasama ang resulta nito kay c gamit ang ||. Upang malinaw ang nais na pagkakasunod-sunod, gumamit ng mga panaklong nang hayagan:
if ((a && b) || c) {
// More explicit evaluation
}
4.2 Mga Bitwise Operator
Ang mga bitwise operator (&, |, ^) ay gumagana sa antas ng bit, ngunit may mas mababang precedence kaysa sa mga arithmetic o comparison operator, kaya mag-ingat sa mga komplikadong expression.
int x = 5; // 0101
int y = 3; // 0011
int result = x & y; // 0001 (bitwise AND)
5. Mga Halimbawang Programa
Narito ang isang halimbawang programa na madalas magdulot ng kalituhan hinggil sa precedence ng operator. Ang pagkakasunod-sunod ng pag-evaluate ng || at && ay madaling ma-misinterpret.
#include <stdio.h>
int main() {
int a = 0, b = 1;
if (a == 0 || a == 1 && b == 0) {
printf("Truen"); // This will be printed
}
return 0;
}
Sa halimbawang ito, a == 1 && b == 0 ay unang sinusuri, na maaaring magdulot ng hindi inaasahang resulta. Upang makuha ang tamang resulta, linawin ang pagkakasunod‑sunod ng pagsusuri gamit ang mga panaklong.
if ((a == 0 || a == 1) && b == 0) {
printf("Truen");
}
6. Konklusyon
Ang pag‑unawa sa prayoridad ng mga operator sa C ay mahalaga upang matiyak ang tamang pag‑ugali ng programa. Kapag humahawak ng mga komplikadong ekspresyon, siguraduhing maunawaan ang prayoridad at asosiyasyon, at gumamit ng mga panaklong kung kinakailangan upang linawin ang pagkakasunod‑sunod ng mga operasyon. Sa pamamagitan ng pagbibigay‑pansin sa prayoridad ng mga operator, makakagawa ka ng mas ligtas at mas epektibong code.



