สวัสดีครับ วันนี้เราจะมาเรียนรู้เกี่ยวกับตัวดำเนินการทางตรรกะในภาษาจาวากันครับเป็นคำสั่งที่นักเขียนโปรแกรมต้องได้ใช้กันตลอดครับ
ตัวดำเนินการทางตรรกะตัวดำเนินการประเภทนี้จะให้ผลลัพธ์ออกมาเป็นค่าทางลอจิก คือเป็นจริง (true) หรือเป็นเท็จ (false) อย่างใดอย่างหนึ่งเท่านั้น ตัวดำเนินการประเภทนี้ยังแบ่งออกเป็นตัวดำเนินการแบบสัมพันธ์ ตัวดำเนินการทางตรรกศาสตร์ และตัวดำเนินการระดับบิต
ตัวดำเนินการแบบสัมพันธ์( Relatoonal Operators )
ตัวดำเนินการประเภทนี้จะนำตัวถูกดำเนินการสองค่ามาเปรียบเทียบกัน ผลลัทธ์ที่ได้จะเป็นจริงหรือเท็จ ในภาษาจาวามีตัวดำเนินการประเภทนี้ 6ตัว ดังตาราง
ตาราง ตัวดำเนินการแบบสัมพันธ์
การนำตัวดำเนินการแบบสัมพันธ์มาเปรียบเทียบข้อมูลนี้สามารถใช้ได้ทั้งกับตัวแปร ค่าคงที่หรือนิพจน์ก็ได้ แต่ข้อมูลที่นำมาเปรียบเทียบกันจะต้องเป็นข้อมูลที่สอดคล้องกัน และผลลัทธ์จากการเปรียบเทียบนี้สามารถนำไปเก็บในตัวแปรแบบบูลีนได้ ตัวอย่างเช่น
ตัวดำเนินการทางตรรกศาสตร์
ตัวดำเนินการประเภทนี้จะใช้กระทำกับตัวถูกดำเนินการที่เป็นนิพจน์ทางตรรกศาสตร์ หรือข้อมูลที่เป็นบูลีน ตัวดำเนินการประเภทนี้ ได้แก่ AND , OR , Exclusive-OR และ NOT โดยตัวดำเนินการแบบ NOT จะกระทำกับตัวถูกตัวดำเนินการตัวเดียว ส่วนตัวดำเนินการตัวอื่นๆ จะกระทำกับตัวถูกดำเนินการสองตัว
ตาราง ตัวดำเนินการทางตรรกศาสตร์
ตัวดำเนินการ
|
ชื่อ
|
ตัวอย่าง
|
ผลลัทธ์
|
&&
|
AND
|
(8>3)&&(6<9)
|
true
|
| |
|
OR
|
(5<6) | | (7>6)
|
true
|
!
|
NOT
|
!(3>2)
|
false
|
^
|
Exclusive-OR
|
(8>3) ^ (4<2)
|
true
|
ตัวดำเนินการระดับบิต (Operators)
ตัวดำเนินการประเภทนี้จะกระทำกับข้อมูลแบบบิตต่อบิต เช่น การกระทำลอจิก AND, OR, NOT หรือเลื่อนบิตแบบบิตต่อบิต เป็นต้น ตัวดำเนินการประเภทนี้แสดงได้ดังตารางต่อไปนะครับ
ตาราง ตัวดำเนินการระดับบิต
ตัวอย่าง ถ้าหากมีการประกาศตัวแปรดังต่อไปนี้
Byte a=4 , b=7
จงหาค่าของ a & b, a | b, a ^b และ b >> 1
วิธีทำ การประกาศตัวแปรดังกล่าวจะทำให้ค่าของ a และ b เป็นดังนี้
A = 0000 0100
B = 0000 0111
ดังนั้น a & b หาได้จาก 0000 0100 AND กันตรงๆแบบบิตต่อบิต
0000 0111
0000 0100 มีค่าเท่ากับ 4
A | b หาได้จาก 0000 0100
0000 0111
0000 0111 มีค่าเท่ากับ 7
A ^ b หาได้จาก 0000 0100
0000 0111
0000 0011 มีค่าเท่ากับ 3
B >> 1 0000 0111
0000 0011 เลื่อนไปทางขวาหนึ่งบิตจะเท่ากับ 3
ลำดับการทำงานของตัวดำเนินการ
ในนิพจน์ต่างๆ อาจมีตัวดำเนินการประกอบอยู่มากว่าหนึ่งตัว การหาผลลัพธ์ของนิพจน์คอมไพเลอร์จะต้องพิจารณาว่าจะทำตัวดำเนินการใดก่อนหลัง ในภาษาวาจามีการจัดลำดับความสำคัญของตัวดำเนินการดังตัวอย่างโดยเรียงลำดับความสำคัญจากบนลงล่าง
ตารางลำดับความสำคัญของตัวดำเนินการ
ตัวอย่าง นิพจน์ต่อไปนี้เป็นการใช้ตัวดำเนินการหลายๆ ตัวในนิพจน์เดียวกัน
ตาราง ตัวดำเนินการระดับบิต
ตัวดำเนินการ
|
ชื่อ
|
ตัวอย่าง
|
ผลลัพธ์
|
&
|
AND
|
4 & 7
|
4
|
|
|
OR
|
4 | 7
|
7
|
~
|
NOT
|
~4
|
-5
|
^
|
Exclusive-OR
|
4 ^ 7
|
3
|
>>
|
เลื่อนบิตไปทางขวา
|
7 >> 1
|
3
|
>>>
|
เลื่อนบิตแบบไม่คิดเครื่องหมาย
|
-3 >>> 1
|
-2
|
<<
|
เลื่อนบิตไปทางซ้าย
|
7 << 1
|
14
|
ตัวอย่าง ถ้าหากมีการประกาศตัวแปรดังต่อไปนี้
Byte a=4 , b=7
จงหาค่าของ a & b, a | b, a ^b และ b >> 1
วิธีทำ การประกาศตัวแปรดังกล่าวจะทำให้ค่าของ a และ b เป็นดังนี้
A = 0000 0100
B = 0000 0111
ดังนั้น a & b หาได้จาก 0000 0100 AND กันตรงๆแบบบิตต่อบิต
0000 0111
0000 0100 มีค่าเท่ากับ 4
A | b หาได้จาก 0000 0100
0000 0111
0000 0111 มีค่าเท่ากับ 7
A ^ b หาได้จาก 0000 0100
0000 0111
0000 0011 มีค่าเท่ากับ 3
B >> 1 0000 0111
0000 0011 เลื่อนไปทางขวาหนึ่งบิตจะเท่ากับ 3
ลำดับการทำงานของตัวดำเนินการ
ในนิพจน์ต่างๆ อาจมีตัวดำเนินการประกอบอยู่มากว่าหนึ่งตัว การหาผลลัพธ์ของนิพจน์คอมไพเลอร์จะต้องพิจารณาว่าจะทำตัวดำเนินการใดก่อนหลัง ในภาษาวาจามีการจัดลำดับความสำคัญของตัวดำเนินการดังตัวอย่างโดยเรียงลำดับความสำคัญจากบนลงล่าง
ตารางลำดับความสำคัญของตัวดำเนินการ
ลำดับ
|
ตัวดำเนินการ
|
เรียงจาก
|
1
|
( ) , ( data type )
|
ซ้ายไปขวา
|
2
|
! , ~ , - , + , - - , ++
|
ซ้ายไปขวา
|
3
|
*, / , % , + , - , << , >> , >>>
|
ซ้ายไปขวา
|
4
|
< , > , <= , >= , == , !=
|
ซ้ายไปขวา
|
5
|
& , ^ , | , && , | |
|
ซ้ายไปขวา
|
6
|
!= , ^= , &= , >>>= , >>= , <<= ,%= , /= , *= , -= , += , =
|
ซ้ายไปขวา
|
จากตารางจะเห็นว่า ลงเล็บจะมีลำดับความสำคัญสูงสุด ส่วนตัวดำเนินการที่ใช้สำหรับกำหนดค่าจะมีลำดับความสำคัญต่ำสุด ถ้าหากมีตัวดำเนินการที่มีลำดับความสำคัญเท่ากันอยู่ในนิพจน์เดียวกัน ลำดับความสำคัญจะเรียงจากซ้ายไปขวา ในการเขียนโปรแกรมถ้าหากมีการประมวลผลซับซ้อนผู้เขียนโปรแกรมควรใส่วงเล็บให้ประมวลผลก่อน เพื่อป้องกันการสับสน
ตัวอย่าง นิพจน์ต่อไปนี้เป็นการใช้ตัวดำเนินการหลายๆ ตัวในนิพจน์เดียวกัน
นิพจน์
|
การทำงาน
|
X > y && a < b
|
ตรวจสอบว่า x มากว่า yและ a น้อยกว่า b จริงหรือไม่
|
X == y | | x == z
|
ตรวจสอบว่า x เท่ากับ y หรือ x เท่ากับ z จริงหรือไม่
|
!( x > y )
|
ตรวจสอบว่า x มากกว่า y ไม่จริงใช่หรือไม่
|
18 / 3*4
|
ตัวดำเนินการอยู่ลำดับเดียวกันจะเรียงจากซ้ายไปขวา ได้ค่าเป็น 24
|
18 % 3*4
|
ตัวดำเนินการอยู่ลำดับเดียวกันจะเรียงจากซ้ายไปขวา ได้ค่าเป็น 0
|
( 15+9 ) / ( 3+1 )*2
|
จะคำนวณ 24 / 4*2 ได้ค่าเป็น 12
|
ไม่มีความคิดเห็น:
แสดงความคิดเห็น