ตัวดำเนินการทางตรรกะ
Relational Operator |
ตัวอย่าง |
|
< |
Op1<Op2 : คืนค่าความเป็นจริงถ้า Op1 น้อยกว่า Op2 | a=(1<3); //aจะมีค่าเป็นจริง |
<= |
Op1<=Op2 : คืนค่าความเป็นจริงถ้า Op1 น้อยกว่า Op2 หรือเท่ากับ Op2 | a=(5<=7); //a จะมีค่าเป็นจริง |
> |
Op1>Op2 :คืนค่าความเป็นจริงถ้า Op1 มากกว่า Op2 | a=(5>7); //a จะมีค่าเป็นจริง |
>= |
Op1>=Op2 : คืนค่าความเป็นจริงถ้า Op1 มากกว่า หรือเท่ากับ Op2 | a=(5>=7); //a จะมีค่าเป็นจริง |
== |
Op1==Op2 : คืนค่าความเป็นจริงถ้า Op1 เท่ากับ Op2 | a=(5==7); // a จะมีค่าเป็นเท็จเพราะ 5 ไม่เท่ากับ 7 |
!= |
Op1!=Op2 : คืนค่าความเป็นจริงถ้า Op1 ไม่เท่ากับ Op2 | a=(5!=7); // a จะมีค่าเป็นจริง เพราะ 5 ไม่เท่ากับ 7 |
“: |
(expression)”a:b :คือค่าตัว operand a ถ้า expression เป็นจริง | a=(3>5)”false:true; //a จะมีค่าเป็นจริง เพราะผลการเปรียเทียบ 3 มากกว่า 5 เป็นเท็จ เมื่อค่าที่ได้เป็นเท็จจะเลือกค่า true |
เครื่องหมายดำเนินการ | ความหมาย | ตัวอย่าง | ผลลัพธ์ |
! | NOT (นิเสธ) | !(5 > 3) | false |
&& หรือ & |
AND (และ) |
(x >= 10)&&(x <= 100) |
มีค่าเป็น true เมื่อ
(x >= 10) มีค่าเป็น true และ (x <= 100) มีค่าเป็น true |
|| หรือ | |
OR (หรือ) |
(x < 10) || (x > 100) |
มีค่าเป็น true เมื่อ
(x < 10) มีค่าเป็น true หรือ (x > 100) มีค่าเป็น true |
^ |
Exclusive OR |
(x > 20) ^ (y > 20) |
มีค่าเป็น false ได้ 2 กรณี คือ
กรณีที่1 เมื่อ (x >= 10) มีค่าเป็น true และ (x <= 100) มีค่าเป็น true กรณีที่2 เมื่อ (x >= 10) มีค่าเป็น false และ (x <= 100) มีค่าเป็น false |
ตัวดำเนินการทางตรรกะแบบต่างๆ สามารถแสดงผลลัพธ์ของนิพจน์ตรรกะตามค่าความจริงของการดำเนินการได้ดังตารางค่าความจริง (Truth Table) ดังนี้
ตารางค่าความจริงของตัวดำเนินการ ! หรือ NOT
ค่าความจริงนิพจน์ |
ตัวอย่าง |
ผลลัพธ์ |
false |
!(false) |
False |
true |
!(true) |
True |
ตารางค่าความจริงของตัวดำเนินการ && หรือ AND
ค่าความจริงนิพจน์ที่1 |
ค่าความจริงนิพจน์ที่2 |
ตัวอย่าง |
ผลลัพธ์ |
false |
false |
false && false |
False |
false |
true |
false && true |
False |
true |
false |
true && false |
False |
True |
true |
true && true |
True |
ตารางค่าความจริงของตัวดำเนินการ || หรือ OR
ค่าความจริงนิพจน์ที่1 |
ค่าความจริงนิพจน์ที่2 |
ผลลัพธ์ |
ผลลัพธ์ |
False |
false |
false || false |
False |
False |
true |
false || true |
True |
True |
false |
true || false |
True |
True |
true |
true || true |
True |
ตารางค่าความจริงของตัวดำเนินการ ^ หรือ XOR
ค่าความจริงนิพจน์ที่1 |
ค่าความจริงนิพจน์ที่2 |
ผลลัพธ์ |
ผลลัพธ์ |
False |
false |
false ^ false |
False |
False |
true |
false ^ true |
True |
True |
false |
true ^ false |
True |
True |
true |
true ^ true |
false |
ตัวอย่าง การใช้ Operator แบบ boolean
class BoolLogic{
public static void main(String args[]){ boolean a = true; boolean b = false; boolean c = a | b; boolean d = a & b; boolean e = a ^ b; boolean f = (!a & b) | (a & !b); boolean g = !a; System.out.println(“a = ” + a); System.out.println(“b = ” + b); System.out.println(“a | b = ” + c); System.out.println(“a & b = ” + d); System.out.println(“a ^ b = ” + e); System.out.println(“!a = ” + g); System.out.println(“!a & b | a & !b = ” + f); } } |
3.1.3 ตัวดำเนินการระดับ (Bitwise Operator) ในการจัดเก็บข้อมูลประเภท Interger, short, int และ long จะเก็บในรูปแบบบิต และการเก็บข้อมูลจะเป็นแบบเครื่องหมาย
Operator |
รูปแบบ และการทำงาน |
ตัวอย่าง |
ผลลัพธ์ที่ได้ |
~ | ~ Op : ทำ complement คือ ทำการเปลี่ยนค่าของบิต 1 เป็น 0 และเปลี่ยนบิตที่มีค่า 0 เป็น 1 | a= 0x0005 |
-6 |
<<, >> | การย้ายบิตไปทางซ้าย และทางขวา | a= 0x0005 << 2 a= 0x0005 >> 2 |
20 |
>>> | การย้ายบิตไปทางขวาเสมือนไม่มีเครื่องหมาย | a= 0x0005 >>> 2 a= 0xFFF5 >>> 2 |
1 |
& | ประมวลผลแบบ Bitwise AND | a= 0x0005 & a = 0x0007; |
5 |
^ | ประมวลผลแบบ Bitwise XOR | a= 0x0005 ^ a= 0x0007; |
2 |
| | ประมวลผลแบบ Bitwise OR | a= 0x0005 | a= 0x0007; |
7 |
3.1.4 ลำดับการทำงานของตัวดำเนินการ (precedence and associativity of operators)
แสดงลำดับการทำงานของตัวดำเนินการในภาษา C มีดังนี้
ลำดับที่ |
ตัวดำเนินการ |
ลักษณะการทำงาน (Associativity) |
1 |
( ) [ ] . -> |
Left to right |
2 |
– ~ ! * & |
Light to left |
3 |
++ – – |
Right to left |
4 |
* / % |
Left to right |
5 |
+ – |
Left to right |
6 |
<< >> |
Left to right |
7 |
< > < = >= |
Left to right |
8 |
= = != |
Left to right |
9 |
& (bitwise AND) |
Left to right |
10 |
^ (bitwise exclu OR) |
Left to right |
11 |
| (bitwise inclu OR) |
Left to right |
12 |
&& |
Left to right |
13 |
|| |
Left to right |
14 |
?: |
Left to right |
15 |
= += -= /= %= |
Right to left |
16 |
<<= >>= |
Right to left |
ตัวดำเนินการที่มีลำดับการทำงานอันดับที่ 1 จะทำงานก่อนอันดับที่ 2 โดยทำงานไปเรื่อย ๆ จนกระทั่งหมดตัวดำเนินการ ส่วนลักษณะการทำงานของตัวดำเนินการแต่ละอันดับนั้นแตกต่างกันไป ซึ่งจะเป็นการทำงานจากซ้ายไปขวา (left to rigth) หรือขวาไปซ้าย (rigth to left) ก็ได้