วันจันทร์ที่ 29 กรกฎาคม พ.ศ. 2556

ตัวดำเนินการทางตรรกะในภาษา java

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

ตาราง ตัวดำเนินการระดับบิต
ตัวดำเนินการ
ชื่อ
ตัวอย่าง
ผลลัพธ์
&
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
ตรวจสอบว่า มากว่า yและ น้อยกว่า จริงหรือไม่
X == y | | x == z
ตรวจสอบว่า x เท่ากับ หรือ เท่ากับ z จริงหรือไม่
!( x > y )
ตรวจสอบว่า มากกว่า y ไม่จริงใช่หรือไม่
18 / 3*4
ตัวดำเนินการอยู่ลำดับเดียวกันจะเรียงจากซ้ายไปขวา ได้ค่าเป็น 24
18 % 3*4
ตัวดำเนินการอยู่ลำดับเดียวกันจะเรียงจากซ้ายไปขวา ได้ค่าเป็น 0
( 15+9 ) / ( 3+1 )*2
จะคำนวณ 24 / 4*2 ได้ค่าเป็น 12
  

ไม่มีความคิดเห็น:

แสดงความคิดเห็น