ใบความรู้ที่ 4.3
ตัวดำเนินการและนิพจน์
การเขียนโปรแกรมจำเป็นจะต้องมีการดำเนินการระหว่างค่าหรือข้อมูลต่างๆอยู่ตลอดเวลา
ซึ่งใบความรู้นี้เราจะได้ศึกษาว่าการดำเนินการในภาษาซีมีอะไรบ้าง
และแต่ละอย่างมีการทำงานอย่างไร
ตัวดำเนินการ (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
|
ไม่มีความคิดเห็น:
แสดงความคิดเห็น