2.7 ลำดับการทำงานของตัวดำเนินการ (precedence and associativity of operators)
ตารางที่ 2.9 แสดงลำดับการทำงานของตัวดำเนินการในภาษา C มีดังนี้
ลำดับที่
|
ตัวดำเนินการ
(Operator) |
ลักษณะการทำงาน (Associativity)
|
1
|
( ) [ ] . -> |
Left to right
|
2
|
- ~ ! * & |
Light to left
|
3
|
++ - - |
Right to left
|
4
|
* / % |
Left to right
|
5
|
+ - |
Left to right
|
6
|
<< >> |
Left to right
|
7
|
< > < = >= |
Left to right
|
8
|
= = != |
Left to right
|
9
|
& (bitwise AND) |
Left to right
|
10
|
^ (bitwise exclu OR) |
Left to right
|
11
|
| (bitwise inclu OR) |
Left to right
|
12
|
&& |
Left to right
|
13
|
|| |
Left to right
|
14
|
?: |
Left to right
|
15
|
= += -= /= %= |
Right to left
|
16
|
<<= >>= |
Right to left
|
ตัวดำเนินการที่มีลำดับการทำงานอันดับที่ 1 จะทำงานก่อนอันดับที่ 2 โดยทำงานไปเรื่อย ๆ จนกระทั่งหมดตัวดำเนินการ ส่วนลักษณะการทำงานของตัวดำเนินการแต่ละอันดับนั้นแตกต่างกันไป ซึ่งจะเป็นการทำงานจากซ้ายไปขวา (left to rigth) หรือขวาไปซ้าย (rigth to left) ก็ได้
ตัวอย่างที่ 2.5 แสดงขั้นตอนการทำงานของตัวดำเนินการ
8 + 5 * 3 4 +15 19 |
ตัวดำเนินการ * อยู่ลำดับสูงกว่าตัวดำเนินการ + จึงต้องคูณเลขก่อนแล้วทำการบวกเลขทีหลัง |
10 / 2 + 5 – 3 5 + 5 – 3 10 - 3 7 |
ตัวดำเนินการ / อยู่ลำดับสูงกว่าตัวดำเนินการ + และ - ส่วนตัวดำเนินการ + และ - อยู่ลำดับเดียวกัน แต่ให้ทำจากซ้ายไปขวา จึงทำบวกก่อนแล้วจึงทำลบ |
9 * 3 - 20 / 5 + 6 27 - 4 + 6 23 + 6 29 |
ตัวดำเนินการ * และ / อยู่ลำดับเดียวกันให้ทำจากซ้ายไปขวา คือ คูณเลขก่อน แล้วหารเลข ส่วนตัวดำเนินการ - และ + อยู่ลำดับเดียวกันให้ทำจากซ้ายไปขวา คือ ลบเลขก่อนแล้วจึงบวกทีหลัง |
ไม่มีความคิดเห็น:
แสดงความคิดเห็น