ตัวดำเนินการทางคณิตศาสตร์ (Arithmetic Operators)
ตัวดำเนินการทางคณิตศาสตร์ เป็นตัวดำเนินการที่คำนวณทางด้านคณิตศาสตร์ให้มีค่าออกมามีชนิดสอดคล้องกับชนิดของตัวถูกกระทำ ประกอบด้วยตัวดำเนินการต่างๆ ดังนี้
เครื่องหมาย | ความหมาย | ตัวอย่าง |
+ | การบวก | A+B |
- | การลบ | A-B |
* | การคูณ | A*B |
/ | การหาร | A/B |
% | การหารเอาแต่เศษไว้ (Modulo) | 5%3=1 เศษ 2 จะเก็บแต่เศษ 2 เอาไว้ |
-- | การลดค่าลงครั้งละ 1 | A -- จะเหมือนกับ A=A-1 |
++ | การเพิ่มค่าขึ้นครั้งละ 1 | A++ จะเหมือนกับ A=A+1 |
แสดงประเภทของตัวดำเนินการทางคณิตศาสตร์
การโอเปอเรชัน (Operation) หรือการทำงานของตัวดำเนินการต้องเป็นไปตามลำดับของการวางค่าคงที่หรือตัวแปรที่จะกระทำต่อกัน ซึ่งเรียกว่า ลำดับของการโอเปอเรชัน ซึ่งลำดับการทำงานของโอเปอเรเตอร์โดยคอมไพเลอร์ภาษา C ต้องเป็นไปตาม กฎการกำหนดลำดับการทำงานของตัวดำเนินการ (Precedence) ดังแสดงในตาราง
โอเปอเรเตอร์ | ลำดับของการโอเปอเรชัน | |
( ) | ซ้ายไปขวา | |
- | ซ้ายไปขวา | * - คือแสดงความเป็นลบของตัวเลข |
* / % | ซ้ายไปขวา | |
+ - | ซ้ายไปขวา | * - คือเครื่องหมายลบค่าตัวเลข |
ตารางที่ แสดงลำดับของการทำงานของตัวดำเนินการทางคณิตศาสตร์ ตามกฎ Precedence
ในการคำนวณ a + b* c ภาษา C จะกระทำเครื่องหมาย % * และ / ก่อนเครื่องหมาย + และ - ดังนั้นถ้า a + b* c จะคำนวณ b* c ก่อน แล้ว จึงค่อยนำมาบวกกับ a
แต่ถ้าเครื่องหมายมีความเท่าเทียมกันจะกระทำจากซ้ายไปขวา เช่น a+b+c จะเริ่มทำจาก a บวก b แล้วจึงนำค่าที่ได้มาบวก c ถ้าต้องการกำหนดลำดับให้ทำโดยการใส่เครื่องหมายวงเล็บในส่วนที่ต้องการให้ทำงานก่อน
ตัวอย่างลำดับของการทำงานของตัวดำเนินการทางคณิตศาสตร์ ตามกฎ Precedence
ตัวดำเนินการ % เป็นตัวดำเนินการทางคณิตศาสตร์เพียงตัวเดียวที่กำหนดให้ใช้กับค่าจำนวนเต็ม เท่านั้น นอกนั้นสามารถใช้กับค่าอื่นๆ ได้ตัวดำเนินการทางคณิตศาสตร์ที่น่าสนใจอีกตัวหนึ่งคือ เครื่องหมาย /เช่น a / b
ถ้าทั้งตัวแปร a และ b เป็น integer ค่าที่ได้จากการดำเนินการของหารจะมีชนิดเป็น integer และถ้า a หรือ b ตัวแปรใดตัวแปรหนึ่งเป็นตัวแปรชนิด float จะได้คำตอบเป็นชนิด float
เช่น
39 / 5 จะมีค่าเท่ากับ 7
39.0 / 5 จะมีค่าเท่ากับ 7.8
จะเห็นได้ว่ามีความแตกต่างที่สำคัญของเครื่องหมายหาร อย่างที่หนึ่งคือ เครื่องหมายหารสำหรับตัวแปร integer และอีกหนึ่งสำหรับตัวแปรแบบ floating ขึ้นอยู่กับชนิดของ operand ที่เราใช้กับเครื่องหมายหารนั้นๆ สำหรับผู้เริ่มต้นเขียนโปรแกรมเป็นไปได้ว่าจะเกิดการผิดพลาดขึ้น ตัวอย่างเช่น 1/3 (ซึ่งมีค่าเท่ากับ 0) แทนที่จะเป็น 1.0/3.0 ซึ่งมีค่าเท่ากับ 0.333… โดยการที่การเขียน 1.0/3.0 เราสามารถเขียนได้เป็นว่า 1.0/3 หรือ 1/3.0 และในแต่ละแบบของนิพจน์จะไม่เป็น 0
ตัวดำเนินการเพิ่ม และลดค่า (Increment & Decrement)
ตัวดำเนินการเพิ่ม และลดค่า เป็นตัวดำเนินการในการเพิ่มหรือลดค่าของตัวแปร โดย
- ตัวดำเนินการเพิ่มค่า ++ จะบวกหนึ่งเข้ากับตัวถูกดำเนินการ
- ตัวดำเนินการลดค่า -- จะลบหนึ่งออกจากตัวถูกดำเนินการ
สาเหตุที่มีตัวดำเนินการนี้ เพราะการดำเนินการเพิ่มหรือลดค่าเกิดขึ้นเสมอ สำหรับตัวดำเนินการ ตัวดำเนินการเพิ่ม และลดค่ามีวิธีใช้งาน 2 แบบคือ
- ใช้เป็นตัวดำเนินการแบบมาก่อน (prefix) เช่น ++n
- ใช้ตัวดำเนินการแบบตามหลัง (postfix) ก็ได้เช่น n++
ในทั้งสองกรณี ผลลัพธ์คือการเพิ่มค่า 1 ให้กับ n แต่นิพจน์ ++n จะเพิ่มค่าก่อนที่จะนำค่าไปใช้ ขณะที่ n++ จะเพิ่มค่าหลังจากนำค่าไปใช้ ซึ่งหมายความว่าถ้ามีการนำค่าไปใช้ (ไม่เพียงหวังเฉพาะผลลัพธ์) ++n และ n++ จะแตกต่างกัน ตัวอย่างดังนี้
ตัวอย่าง ถ้า n มีค่า 5
x = n++; จะเป็นการกำหนดค่า x ให้กับ 5
x = ++n; จะเป็นการกำหนดค่า x ให้กับ 6
ตัวดำเนินการนี้จะใช้ได้กับเฉพาะตัวแปรเท่านั้น จะใช้กับนิพจน์อื่นๆ ไม่ได้เช่น (i+j)++
ตัวอย่างเช่น
#include <stdio.h>
int main()
{
int x=2;
int y=2;
printf(”x++ = %d\n”, x++);
printf(”x = %d\n”, x) ;
printf(”++y = %d\n”, ++x);
printf(”y = %d\n”, y) ;
return 0;
}
ผลลัพธ์
|
ตัวดำเนินการสัมพันธ์และตัวดำเนินการตรรกะ (Relational, Equality, and Logical Operators)
Operator | เครื่องหมาย | ความหมาย |
ตัวดำเนินการสัมพันธ์ | < | น้อยกว่า |
(Relational Operator) | > | มากกว่า |
<= | น้อยกว่า หรือ เท่ากับ | |
>= | มากกว่า หรือ เท่ากับ | |
ตัวดำเนินการเท่ากับ | == | เท่ากับ |
(Equality Operator) | != | ไม่เท่ากับ |
ตัวดำเนินการตรรกะ | ! | นิเสธ |
(Logical Operator) | && | และ |
|| | หรือ |
ตารางที่ แสดงตัวดำเนินการสัมพันธ์และตัวดำเนินการตรรกะ
ตัวดำเนินการสัมพันธ์ (Relational Operator)
ตัวดำเนินการสัมพันธ์ เป็นเครื่องหมายที่ใช้ในการเปรียบเทียบและตัดสินใจ ซี่งผลของการเปรียบเทียบจะเป็นได้ 2 กรณีเท่านั้นคือ จริงและเท็จ ภาษาซีถือว่าค่าทางตรรกจริงและเท็จมีชนิดเป็น int ดังนั้นผลการกระทำทางตรรกจึงมีค่าเป็นจำนวนเต็ม และมีค่าได้เพียงสองค่าคือ 1 หรือตัวเลขใดๆ แทนค่าความจริงเป็นจริง และ 0 แทนค่าความจริงเป็นเท็จ (0 เป็นเท็จ ส่วนตัวเลขอื่นๆ ทั้งหมดมีค่าเป็นจริง)
เครื่องหมายที่เป็นตัวดำเนินการสัมพันธ์มี 4 ตัวคือ
< (น้อยกว่า)
> (มากกว่า)
<= (น้อยกว่าเท่ากับ) และ
>= (มากกว่าเท่ากับ)
ตัวอย่างการใช้งาน เช่น
a<3 /* ถ้า a มีค่าเป็น 5 ประโยคนี้จะได้ผลลัพธ์เป็น 0 (เท็จ) */
a>b /* ถ้า a=10 b=8 ประโยคนี้จะได้ผลลัพธ์เป็น 1 (จริง) */
-1 >= (2.2*X+3.3)
a<b<c /* รูปแบบถูกต้อง แต่ลำดับการวางตัวแปรอาจทำให้สับสนได้ โดยจะทำ
การเปรียบเทียบค่า b และ c ก่อน จึงนำผลลัพธ์มาเปรียบเทียบกับ a */
ตัวอย่างการใช้งานผิดแบบ
a =< b /* ผิดลำดับ เครื่องหมาย = มาก่อน < */
a < = b /* ผิดรูปแบบ ห้ามเว้นวรรคระหว่าง < และ = */
ตัวดำเนินการเท่ากับ (Equality Operator)
ตัวดำเนินการเท่ากับ ใช้ในการเปรียบเทียบค่า 2 ค่า ว่ามีค่าเท่า หรือไม่เท่ากัน ผลลัพธ์ที่ได้ จะมีเพียง 2 ค่าเช่นเดียวกับผลลัพธ์ของตัวดำเนินการสัมพันธ์คือ จริง และ เท็จ
เครื่องหมายที่เป็นตัวดำเนินการเท่ากับมี 2 ตัวคือ
== (เท่ากับ)
!= (ไม่เท่ากับ)
ตัวอย่างการใช้งาน เช่น
c == ‘A’ /* ถ้าตัวแปร c เก็บค่าอักขระ A ผลลัพธ์จะได้ค่าจริง */
k != -2 /* ถ้าตัวแปร k เก็บค่าตัวเลข –2 ผลลัพธ์จะได้ค่าเท็จ */
x+y == 2 * z – 5
ตัวอย่างการใช้งานผิดแบบ
a=b /* การเปรียบเทียบค่าตัวแปร a กับ b ว่ามีค่าเท่ากันหรือไม่
กลายเป็นการให้ค่าตัวแปร a ด้วยค่าตัวแปร b */
a= =b -1 /* ใช้งานผิดรูปแบบ โดยมีช่องว่างระหว่างเครื่องหมาย = ทั้ง 2 ตัว */
ตัวดำเนินการตรรกะ (Logical Operator)
ตัวดำเนินการตรรกะ ใช้ในการเปรียบเทียบ และกระทำทางตรรกะกับค่าตัวเลข หรือค่าที่อยุ่ใน ตัวแปร ผลลัพธ์ที่ได้ จะมีเพียง 2 ค่าเช่นเดียวกับผลลัพธ์ของตัวดำเนินการสัมพันธ์คือ จริง และ เท็จ
เครื่องหมายที่เป็นตัวดำเนินการทางตรรกะ มี 3 ตัวคือ
! (นิเสธ)
&& (และ)
|| (หรือ)
**หมายเหตุ นิเสธ คือการกลับค่าความจริงของค่าตัวเลข หรือตัวแปรที่ตามหลังเครื่องหมาย
ตัวดำเนินการนิเสธ ต้องการตัวถูกกระทำการเพียง 1 ตัวเท่านั้น
ตัวอย่างการใช้งาน
!a /* ถ้าค่าความจริงของตัวแปร a มีค่าจริง ผลลัพธ์จากการนิเสธจะได้ค่าเป็นเท็จ */
!(x+7.7)
!(a<b || c<d) /* a มากระทำกับ b แล้วเอาผลลัพธ์มา || กับ ผลลัพธ์ระหว่างการกระทำระหว่าง
c กับ d จากนั้นนำผลลัพธ์ที่ได้จากการ || มา ทำการนิเสธอีก */
ตัวอย่างการใช้งานผิดแบบ
a! /* ผิดลำดับ เครื่องหมาย ! มาก่อนตัวแปร */
a! = b /* ผิดความต้องการ โดยความต้องการคือ กลายเป็นการใช้เครื่องหมาย != ไป */
ตัวดำเนินการ && และ || ต้องการตัวถูกกระทำ 2 ตัว
ตัวอย่างการใช้งาน
a&&b /* a และ b ถ้าค่าความจริงของ a เป็นจริง และ ค่าความจริง b เป็นจริง
ผลลัพธ์ที่ได้จะมีค่าความจริงเป็นจริง */
a || b /* a หรือ b ถ้าค่าความจริงของ a เป็นเท็จ และ ค่าความจริง b เป็นเท็จ
ผลลัพธ์ที่ได้จะมีค่าความจริงเป็นเท็จ */
!(a<b) && C /* นำ a มาเปรียบเทียบกับ b แล้วนำผลลัพธ์มานิเสธ จากนั้นมา && กับ C */
3 && (-2 * a + 7) /* หาค่าภายในวงเล็บก่อน แล้วนำค่าผลลัพธ์ที่ได้มา && กับ 3 */
ตัวอย่างการใช้งานผิดแบบ
a && /* ตัวกระทำไม่ครบ */
a| |b /* เว้นช่องว่างระหว่างเครื่องหมาย || */
a & b /* เครื่องหมาย && ไม่ครบ */
&b /* ตำแหน่งในหน่วยความจำของตัวแปร b */
การหาค่าของตัวดำเนินการตรรกะ
· && (และ)
นำค่าความจริง 2 ค่ามาเปรียบเทียบกัน ได้ผลของการเปรียบเทียบตามตาราง
P | Q | P && Q |
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
แสดงผลของตัวดำเนินการ && ระหว่างตัวแปร P และ Q
· || (หรือ)
นำค่าความจริง 2 ค่ามาเปรียบเทียบกัน ได้ผลของการเปรียบเทียบตามตาราง
P | Q | P || Q |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
แสดงผลของตัวดำเนินการ || ระหว่างตัวแปร P และ Q
· ! (นิเสธ)
นำค่าความจริงมาเปรียบเทียบ ได้ผลของการเปรียบเทียบตามตาราง
P | !P |
0 | 1 |
1 | 0 |
แสดงผลของตัวดำเนินการ ! กับตัวแปร P
ตัวดำเนินการประกอบ (Compound Operator)
ตัวดำเนินการประกอบ คือ ตัวดำเนินการที่เป็นรูปแบบย่อ ของตัวดำเนินการ+ตัวแปรที่ถูกดำเนินการ โดยตัวดำเนินการประกอบในภาษาซี มีทั้งหมด 10 ตัวดังนี้
+= -= /= %=
<<= >>= != ^=
|
จะมีความหมายเท่ากับ
|
ตัวอย่างเช่น
i = i + 1; ตัวดำเนินการประกอบคือ i += 1;
i = i – a; ตัวดำเนินการประกอบคือ i - = a;
i = i * (a + 1); ตัวดำเนินการประกอบคือ i *=a+1;
i = i / (a-b); ตัวดำเนินการประกอบคือ i /= a-b;
ไม่มีความคิดเห็น:
แสดงความคิดเห็น