การเขียนโปรแกรมจำเป็นจะต้องมีการดำเนินการระหว่างค่าหรือข้อมูลต่างๆอยู่ตลอดเวลา ซึ่งใบความรู้นี้เราจะได้ศึกษาว่าการดำเนินการในภาษาซีมีอะไรบ้าง และแต่ละอย่างมีการทำงานอย่างไร
ตัวดำเนินการ (Operator)
ตัวดำเนินการ (Operator) คือ การดำเนินการทางคณิตศาสตร์ หรือการดำเนินการทางตรรกศาสตร์ ซึ่งมักจะเป็นเครื่องหมายหรือสัญลักษณ์พิเศษต่างๆ เช่น +, -, *, /, &&, | |, >,< เป็นต้น
ตัวถูกกระทำ (Operand)
ตัวถูกกระทำ (Operand) คือ ค่าคงที่ ตัวแปร นิพจน์ หรือฟังก์ชั่น ก็ได้
นิพจน์ (Expression)
นิพจน์ (Expression) คือ การนำเอาตัวดำเนินการ และตัวถูกกระทำหลาย ๆ ตัวมารวมเข้าด้วยกันเป็นประโยคเดียว
รูปที่ 7.1 แสดงความสัมพันธ์ระหว่างโอเปอแรนด์ และนิพจน์
การดำเนินการทางคณิตศาสตร์
หมายถึง การนำค่าโอเปอเแรนด์ (Operand) 2 ค่ามากระทำกันโดยใช้โอเปอเรเตอร์หรือตัวดำเนินการทางคณิตศาสตร์ เช่น บวก, ลบ, คูณ, หาร หรือบางครั้งก็เป็นการนำโอเปอเรเตอร์ไปกระทำกับโอเปอแรนด์ตัวเดียว
โอเปอเรเตอร์ทางคณิตศาสตร์ (Arithmetic Operator) ในภาษาซีแบ่งออกเป็น 7 ประเภทดังตาราง
โอเปอเรเตอร์
|
ความหมาย
|
ตัวอย่าง
|
ผลลัพธ์
|
+
|
บวก
|
9 + 4
|
13
|
-
|
ลบ
|
9 - 4
|
5
|
*
|
คูณ
|
9 * 4
|
36
|
/
|
หาร
|
9 / 4
|
2 (กรณีนี้ ทั้งตัวตั้งและตัวหารเป(นเลขจำนวนเต็ม จึงได้ผลลัพธ์เปผ็นเลขจำนวนเต็ม โดยเศษจะถูกปัดทิ้ง)
|
%
|
หารเอาเศษ(Modulo)
|
9 % 4
|
1
|
++
|
เพิ่มค่าขึ้น 1
โดย a++ จะนำค่าของ a ไปใช้ก่อน แล้วจึงเพิ่มค่าของ a ขึ้น 1
|
b = a++;
จะมีความหมายเทียบเท่ากับ 2 บรรทัดต่อไปนี้
b = a;
a = a+1;
|
สมมติ a มีค่าเป็น 9 หลังจากทำคำสั่ง b = a++; แล้วจะได้ว่า a=10, b=9
|
++a จะเพิ่มค่าของ a ขึ้น 1 ก่อน แล้วจึงนำค่าของ a ไปใช้
|
b = ++a;
จะมีความหมายเทียบเท่ากับ 2 บรรทัดต่อไปนี้
a = a+1;
b = a;
|
สมมติ a มีค่าเป็น 10 หลังจากทำคำสั่ง b = ++ a; แล้วจะได้ว่า a=11, b=11
| |
- -
|
ลดค่าลง 1
โดย a- - จะนำค่าของ a ไปใช้ก่อน แล้วจึงลดค่าของ a ลง 1
|
b = a- -;
จะมีความหมายเทียบเท่ากับ 2 บรรทัดต่อไปนี้
b = a;
a = a-1;
|
สมมติ a มีค่าเป็น 11 หลังจากทำคำสั่ง b = a--; แล้วจะได้ว่า a=10, b=11
|
- -a จะลดค่าของ a ลง 1 ก่อน แล้วจึงนำค่าของ a ไปใช้
|
b = - - a;
จะมีความหมายเทียบเท่ากับ 2 บรรทัดต่อไปนี้
a = a-1;
b = a;
|
สมมติ a มีค่าเป็น 10 หลังจากทำคำสั่ง b = -- a; แล้วจะได้ว่า a=9, b=9
|
เนื่องจากโอเปอเรเตอร์มีอยู่หลายชนิด ดังนั้นภาษาซีจึงได้กำหนดลำดับการทำงานของโอเปอเรเตอร์ ดังนี้
ตารางที่ 7.1 ลำดับการทำงานของโอเปอเรเตอร์
ในการทำงานให้เริ่มต้นจากโอเปอเรเตอร์ที่มีลำดับความสำคัญสูงสุดก่อน กล่าวคือ จะทำโอเปอเรเตอร์ที่มีลำดับความสำคัญสูงสุดไล่ไปยังโอเปอเรเตอร์ที่มีลำดับความสำคัญต่ำสุด แต่หากพบโอเปอเรเตอร์ที่มีลำดับความสำคัญเท่ากัน จะทำโอเปอเรเตอร์เหล่านั้นจากซ้ายไปขวา
ตัวอย่างการทำงานของโอเปอเรเตอร์
ตัวอย่างที่ 7.2 จงหาค่าของนิพจน์ 8+7*6
วิธีทำ 1. ให้สังเกตที่ตัวโอเปอเรเตอร์ก่อนเสมอว่ามีโอเปอเรเตอร์อะไรบ้าง ในที่นี้มีโอเปอเรเตอร์ + และ * 2. ทำการไล่ลำดับความสำคัญของโอเปอเรเตอร์ทั้งหมดเปรียบเทียบกัน จากตัวที่มีลำดับความสำคัญสูงสุดไปยังตัวที่มีลำดับความสำคัญต่ำสุด
3. จากข้อ 2 จะได้ว่าลำดับการทำงานเป็นดังนี้
ขั้นที่ 1 7 * 6 = 42
ขั้นที่ 2 8 + ค่าที่ได้จากขั้นที่ 1
= 8 + 42
= 50
ดังนั้น 8 + 7 * 6 = 50
ตัวอย่างที่ 7.3 จงหาค่าของนิพจน์ 1 * 3 / 3 * 4 % 5
วิธีทำ 1. ในที่นี้มีโอเปอเรเตอร์ *, /, %
2. ไล่ลำดับความสำคัญของโอเปอเรเตอร์ ปรากฏว่าโอเปอเรเตอร์ทั้งสามมีลำดับความสำคัญเท่ากัน แล้วจะทำอย่างไร
3. โอเปอเรเตอร์ที่มีลำดับความสำคัญเท่ากันจะถูกทำจากซ้ายไปขวา ดังนี้
ขั้นที่ 1 1 * 3 = 3
ขั้นที่ 2 ค่าที่ได้จากขั้นที่ 1 / 3 = 3 / 3 = 1
ขั้นที่ 3 ค่าที่ได้จากขั้นที่ 2 * 4 = 1 * 4 = 4
ขั้นที่ 4 ค่าที่ได้จากขั้นที่ 3 % 5 = 4 % 5 = 4
ดังนั้น 1 * 3 / 3 * 4 % 5 = 4
ตัวอย่างที่ 7.4 กำหนด a = 9, b = 3, c = 2 จงหาค่าของนิพจน์ -(a + b + c) + a * c++ และค่าของ a, b และ c
วิธีทำ
1. โจทย์ข้อนี้แตกต่างจากข้ออื่น คือ เป็นการนำตัวแปรมากระทำต่อกัน ไม่ใช่ค่าคงที่อย่างข้อที่ผ่านมา วิธีที่ง่ายคือ ให้นำค่าของตัวแปรแต่ละตัวแทนที่ลงในตัวแปรนั้น ๆ ก่อน ดังนี้ -(9 + 3 + 2) + 9 * 2++
2. ไล่ลำดับความสำคัญของโอเปอเรเตอร์ดังนี้
3. เริ่มต้นทำการคำนวณ
ขั้นที่ 1 ทำภายในวงเล็บก่อน คือ (9+3+2) ได้ผลลัพธ์เป็น 14 ขณะนี้จะได้นิพจน์เป็น –(14) + 9 * 2++
ขั้นที่ 2 ทำโอเปอเรเตอร์ที่มีความสำคัญในลำดับถัดมา นั่นคือ ทำ ++ โดย 2++ มาจาก c++ ซึ่งในขณะนี้ยังไม่มีผลใดๆ แต่เมื่อทำการประมวลผลนิพจน์เสร็จสิ้นแล้ว ค่าของตัวแปร c จะเพิ่มขึ้นอีก 1 กล่าวคือ ค่าของ c จะถูกนำมาคำนวณในนิพจน์ก่อนที่จะเพิ่มค่าขึ้นอีก 1 ดังนั้น ในขณะนี้นิพจน์จะเป็น –(14) + 9 * 2
ขั้นที่ 3 ต่อมาจะทำโอเปอเรเตอร์ – ซึ่งเป็นเครื่องหมายลบหน้าตัวเลข 14 ดังนั้น จะได้นิพจน์เป็น –14 + 9 * 2
ขั้นที่ 4 ทำโอเปอเรเตอร์ * คือ 9 * 2 ได้ผลลัพธ์เป็น 18 ดังนั้น ในขณะนี้นิพจน์จะเป็น -14 + 18
ขั้นที่ 5 ทำโอเปอเรเตอร์ตัวสุดท้ายคือ โอเปอเรเตอร์ + จะได้ว่า -14 + 18 ได้ผลลัพธ์เป็น 4 ดังนั้นค่าของนิพจน์ -(a + b + c) + a * c++ คือ 4 และค่าของตัวแปร a, b และ c หลังจากทำนิพจน์ดังกล่าวแล้วคือ 9 (ค่าเดิม), 3(ค่าเดิม) และ 3 (ถูกเพิ่มค่าขึ้น 1 เนื่องจากการทำ c++ ในขั้นที่ 2) ตามลำดับ
การดำเนินการทางตรรกะ
ตรรกะ (Logic) คือ แนวคิดเชิงเหตุและผลที่เกี่ยวข้องกับค่าความจริง 2 ค่า คือ จริง (True) หรือ เท็จ (False)
โอเปอเรเตอร์ทางตรรกะ (Logical Operator) คือ โอเปอเรเตอร์ที่ให้ผลลัพธ์ออกมาเป็นค่าตรรกะ “จริง” หรือ “เท็จ” อย่างใดอย่างหนึ่งเท่านั้น
ตารางที่ 7.5 โอเปอเรเตอร์ทางตรรกะ
โอเปอเรเตอร์
|
ความหมาย
|
>
|
มากกว่า
|
>=
|
มากกว่าหรือเท่ากับ
|
<
|
น้อยกว่า
|
<=
|
น้อยกว่าหรือเท่ากับ
|
==
|
เท่ากับ
|
!=
|
ไม่เท่ากับ
|
&&
|
และ(AND)
|
||
|
หรือ(OR)
|
!
|
นิเสธ(NOT)
|
A
|
B
|
A&&B
|
A||B
|
!A
|
จริง
|
จริง
|
จริง
|
จริง
|
เท็จ
|
จริง
|
เท็จ
|
เท็จ
|
จริง
|
เท็จ
|
เท็จ
|
จริง
|
เท็จ
|
จริง
|
จริง
|
เท็จ
|
เท็จ
|
เท็จ
|
เท็จ
|
จริง
|
ค่าตรรกะ “จริง” และ “เท็จ” นั้น หากแปลงเป็นเลขจำนวนจะได้ค่าเท่ากับ 1 และ 0 ตามลำดับ
ตัวอย่างการทำงานของโอเปอเรเตอร์ทางตรรกะ
นิพจน์
|
ค่าตรรกะ
|
30 > 20
|
จริง(1)
|
200 >= 200
|
จริง(1)
|
10 == 10
|
จริง(1)
|
10 != 10
|
เท็จ(0)
|
((10*7/5)&&0)
|
เท็จ(0) เพราะเมื่อนำค่าใดก็ตามมาดำเนินการ AND (ด้วยโอเปอเรเตอร์ &&)กับค่า 0 (เทียบเท่ากับค่าตรรกะ “เท็จ”) จะได้ผลลัพธ์เป็นเท็จเสมอ
|
10&&1
|
จริง(1)
|
((2!=1)||0) จะได้ 1||0
|
จริง(1) เพราะเมื่อนำค่าใดก็ตามมาดำเนินการ OR (ด้วยโอเปอเรเตอร์ ||)กับค่า 1 (เทียบเท่ากับค่าตรรกะ “จริง”) จะได้ผลลัพธ์เป็นจริงเสมอ
|
((2==1)||0) จะได้ 0||0
|
เท็จ(0)
|
!0
|
จริง(1)
|
!1
|
เท็จ(0)
|
!!!!0
|
เท็จ(0)
|
!!!!(!1)
|
เท็จ(0)
|
การกำหนดค่าให้กับตัวแปรถือเป็นการดำเนินการอีกรูปแบบหนึ่งในภาษาซี โดยใช้โอเปอเรเตอร์สำหรับกำหนดค่า (Assignment Operator) ซึ่งมีอยู่หลายชนิด ดังรายละเอียดในตารางต่อไปนี้
กำหนด x = 10 และ y = 2
ตารางที่ 7.7 แสดงโอเปอเรเตอร์สำหรับกำหนดค่า
โอเปอเรเตอร์
|
ตัวอย่างการใช้งาน
|
มีความหมายเทียบเท่ากับ
|
+=
|
x += y
|
x = x + y
|
-=
|
x -= y
|
x = x - y
|
*=
|
x *= y
|
x = x * y
|
/=
|
x /= y
|
x = x / y
|
%=
|
x %= y
|
x = x % y
|
ไม่มีความคิดเห็น:
แสดงความคิดเห็น