ใบความรู้

ใบความรู้ที่ 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