ตัวดำเนินการ คือ สัญลักษณ์ที่ใช้การการกระทำกับข้อมูลนั้นๆ เช่น การบวกข้อมูล การเปรียบเทียบ และการเปลี่ยนแปลงข้อมูล โดยเรื่องการดำเนินการนี้จะเป็นส่วนต่อของเรื่องตัวแปรนั้นเอง
ตัวดำเนินการด้านการคำนวน
ตัวดำเนินการด้านการคำนวน คือการใช้สัญลักษณ์ต่างๆ มาใช้ในการคำนวนทางคณิตศาสตร์พื้นฐาน ได้แก่ การบวก ลบ คูณ หาร ตัวดำเนินการด้านการคำนวนใน Arduino มีดังนี้
สัญลักษณ์ | การดำเนินการ |
+ | บวกเลข |
- | ลบเลข |
* | คูณเลข |
/ | หารเลข |
% | หารเอาเศษ |
++ | เพิ่มค่าขึ้นหนึ่ง |
-- | ลดค่าลงหนึ่ง |
ตัวอย่าง 1
int number;
number = 10 + 20;
จากโค้ดในตัวอย่างที่ 1 ได้มีการสร้างตัวแปร number ชนิด int แบบไม่กำหนดค่า ในบรรทัดต่อมาได้มีการใช้ตัวดำเนินการบวกเลข 10 กับ 20 แล้วจึงนำไปเก็บในตัวแปร number ดังนั้นสุดท้ายแล้ว number จึงมีค่าเป็น 30
ตัวอย่าง 2
int number = 10;
boolean is_even;
is_even = number%2;
ตัวอย่างที่ 2 นี้เป็นโปรแกรมตรวจเช็คว่าเป็นเลขคู่หรือเลขคี่ ในบรรทัดแรก ได้ประกาศตัวแปรชนิด int ชื่อ number เพื่อเก็บตัวเลขที่ใช้เช็ค ในบรรทัดที่ 2 ประกาศตัวแปรชนิด boolean ชื่อตัวแปร is_even ใช้เก็บค่าว่าเป็นเลขคู่ หรือเลขคี่ โดยจะสามารถใส่ค่าเป็น 0 (False : เท็จ) หรือ 1 (True : จริง) ในบรรทัดที่ 3 ใช้สัญลักษณ์ % กับ 2 หมายถึงการนำค่าในตัวแปร number มาหารด้วย 2 เอาเฉพาะเศษ ในตัวอย่างตัวแปร number มีค่าเป็น 10 เมื่อนำมาหารด้วย 2 แล้วเอาเฉพาะเศษ ซึ่ง 10 หารด้วย 2 ไม่มีเศษ จึงได้ค่าเป็น 0 ไปเก็บในตัวแปร is_even
ตัวดำเนินการเปรียบเทียบ
ตัวดำเนินการเปรียบเทียบ คือการนำตัวเลข 2 จำนวนมาเปรียบเทียบกัน
สัญลักษณ์ | การดำเนินการ |
== | เท่ากับ |
!= | ไม่เท่ากับ |
> | มากกว่า |
< | น้อยกว่า |
>= | มากกว่า หรือเท่ากับ |
<= | น้อยกว่า หรือเท่ากับ |
ตัวอย่าง
10 == 50 ผลลัพธ์ เท็จ
10 < 50 ผลลัพธ์ จริง
10 <= 10 ผลลัพธ์ จริง
10 < 10 ผลลัพธ์ เท็จ
80 != 10 ผลลัพธ์ จริง
'A' == 'a' ผลลัพธ์ เท็จ
'C' == 'C' ผลลัพธ์ จริง
* สาเหตุที่สามารถเปรียบเทียบตัวอักษรได้ เนื่องจากคอมไพเลอร์จะแปลงตัวอักษรเป็นรหัสแอสกี (ASCII)
ตัวดำเนินการทางตรรก (Logical Operator)
ตัวดำเนินการด้านตรรกใช้ในการดำเนินการเปรียบเทียบซ้อน
สัญลักษณ์ | การดำเนินการ |
|| | หรือ (มีการเปรียบเทียบใดเป็นจริง หรือเป็นจริงทั้งหมด ผลที่ได้คือจริง) |
&& | และ (เป็นจริงทั้งหมด ผลที่ได้จึงจะเป็นจริง) |
! | กลับค่า |
ตัวอย่าง
10 == 50 || 20 == 20 ผลลัพธ์ จริง
10 == 50 && 20 == 20 ผลลัพธ์ เท็จ
'A' != 'A' && 'A' == 'A' ผลลัพธ์ เท็จ
100 < 200 && 300 < 400 && 500 <= 500 ผลลัพธ์ จริง
ตัวดำเนินการระดับบิต (Bitwise Operators)
เป็นการดำเนินการกับบิตในเลขฐาน 2 เช่น การเลื่อนบิต การเซ็ตบิต โดยตัวดำเนินการการนี้จะใช้ได้กับข้อมูลชนิด char int และ byte เท่านั้น
สัญลักษณ์ | การดำเนินการ |
& |
And
|
| | OR |
^ | Exclusive OR (XOR) |
~ | กลับค่าบิต (1's complement) |
>> | เลื่อนบิตไปทางขวา |
<< | เลื่อนบิตไปทางซ้าย |
* โดยปกติแล้ว Arduino จะไม่ต้องใช้การดำเนินการระดับบิต เพราะการดำเนินการระดับบิตจะใช้กับการเซ็ตรีจิสเตอร์เป็นส่วนใหญ่ ซึ่ง Arduino ใช้ไลบารี่ในการเซ็ตรีจิสเตอร์ ทำให้ไม่จำเป็นต้องเซ็ตรีจิสเตอร์เอง
ตัวอย่าง
byte a = 0x0000001;
a = a|0x00000010; // ผลคือ a ได้ 00000011 เพราะ 0000001 OR 00000010 ได้ 00000011
a = a&0x00000000; // ผลคือ a ได้ 00000000 เนื่องจาก 00000011 AND 00000000 ได้ 00000000
a = 0x00110000; // เซ็ตตัวแปร a เป็น 00110000
a = ~a; // ผลคือ a ได้ 11001111 เพราะนำค่า 00110000 มา 1' complement
a = a<<2; ผลคือ a ได้ 00111100 เพราะเลื่อนไปทางซ้าย 2 ตัว ทำให้บิตที่เกินถูกตัดออก และเพิ่ม 0 มาทางซ้าย 2 ตัว
a = a>>2; ผลคือ a ได้ 00001111 เพราะเลื่อนไปทางขวา 2 ตัว ทำให้มี 0 เพิ่มขึ้นมาทางขวา 2 ตัว ส่วนค่าที่เกินอยู่ด้านซ้ายก็ถูกตัดออก
การเซ็ตบิต
a |= (1<<2); // เซ็ตบิตที่ 2 ให้เป็น 1 ด้วยการสร้าง 00000001 ขึ้นมา แล้วเลื่อนบิตไปทางซ้าย 2 ตัว ทำให้มี 0 เพิมขึ้นมา เป็น 00000100 แล้วนำไป OR กับ a ดังนั้นไม่ว่า a บิตที่ 2 จะเป็นอะไร เมื่อนำมา OR ผลที่ได้คือบิตที่ 2 จะเป็น 1
การเคลียร์บิต
a &= ~(1<<2); // เซ็ตบิตที่ 2 ให้เป็น 1 ด้วยการสร้าง 00000001 ขึ้นมา แล้วเลื่อนบิตไปทางซ้าย 2 ตัว ทำให้มี 0 เพิมขึ้นมา เป็น 00000100 แล้วกลับค่า จึงได้เป็น 0x11111011 แล้วนำไป AND กับ a ดังนั้นไม่ว่า a บิตที่ 2 จะเป็นอะไร เมื่อนำมา AND ผลที่ได้คือบิตที่ 2 จะเป็น 0
ตัวดำเนินการแบบสั้น (Compound Assignment)
จากในตารางตัวดำเนินการด้านการคำนวน จะเห็นว่ามีตัวดำเนินการ ++ ในการเพิ่มค่า และตัวดำเนินการ -- ในการลบค่า เราสามารถนำมาใช้ได้ดังนี้
int loop_num = 0;
void setup() { }
void loop() {
delay(1000);
loop_num++;
}
จากโค้ด จะเห็นว่ามีการประกาศตัวแปร loop_num ไว้ด้านบนสุด เพื่อนับจำนวนรอบในการวนลูป ในฟังก์ชั่นหลัก loop() ได้ใช้ฟังก์ชั่น delay() เพื่อหน่วงเวลาหลังจากหมดเวลาหน่วงเวลา ได้ใช้ตัวดำเนินการ ++ ในการเพิ่มค่าให้กับตัวแปร loop_num ขึ้นหนึ่งลำดับ และวนรอบเพิ่มค่าไปเรื่อยๆไม่สิ้นสุด
int loop_num = 0;
void setup() { }
void loop() {
delay(1000);
loop_num += 10;
}
จากโค้ดด้านบน บรรทัดที่ 5 ได้เปลี่ยนตัวดำเนินการจาก ++ เป็น += เพื่อใช้เพิ่มค่าหลายจำนวน ซึ่งจะมีค่าเท่ากับ loop_num + 10 แต่วิธีนี้สั้นกว่า จึงนิยมใช้มากกว่าในการทำงานแค่เพิ่มค่าหมายจำนวน ซึ่งจะใช้กับลบ คูณ หาร ก็ได้เช่นกัน โดยเปลี่ยนจาก += เป็น -= *= /=
นอกจากการใช้ ++ วนการบวกค่าแล้ว ยังสามารถที่จะดึงค่าก่อนบวก หรือหลังบวก พร้อมกับการบวกจำนวนเพิ่มขึ้นไปได้อีกด้วย โดยการนำ ++ ไปวางไว้หน้าตัวแปร เพื่อให้ส่งค่ากลับก่อนบวก หรือนำ ++ ไปไว้หลังตัวแปร เพื่อให้บวกก่อนส่งค่ากลับ เช่น
int loop_num = 0, last;
void setup() { }
void loop() {
delay(1000);
last = ++loop_num;
}
การจัดการกับข้อมูลระดับบิต ก็สามารถจะยุบรูปแบบได้เช่นกัน
ตัวดำเนินการ | ตัวอย่าง | มีค่าเท่ากับ |
<<= | a<<=b; | a = a<<b; |
&= | a &= b; | a = a&b; |
|= | a |= b; | a = a|b; |
^= | a ^= b; | a = a ^ b; |
ไม่มีความคิดเห็น:
แสดงความคิดเห็น