"สวัสดี บิลาโบ!"
"Bilaabo ยินดีที่จะทักทายเพื่อนของเขา!"
"วันนี้ Bilaabo จะบอกคุณเกี่ยวกับลำดับความสำคัญของตัวดำเนินการ แต่ก่อนอื่น เขาจะบอกคุณเกี่ยวกับตัวดำเนินการเอง"
"คุณพูดถึงโอเปอเรเตอร์เหล่านี้ว่าอะไร"
"อันที่จริง คุณคุ้นเคยกับพวกมันอยู่แล้ว คุณอาจไม่รู้ว่าพวกมันถูกเรียกว่าโอเปอเรเตอร์"
"เช่น สมมติว่าเรามีนิพจน์ c = a + b; "
"มีตัวดำเนินการสองตัว: ตัวดำเนินการเพิ่มและตัวดำเนินการมอบหมาย"
"อีกนัยหนึ่ง ตัวดำเนินการเป็นเพียงสัญลักษณ์ทางคณิตศาสตร์ เช่นเดียวกับการคูณ การหาร และการบวก"
"ใช่ นั่นเป็นความจริง อย่างไรก็ตาม มีความแตกต่าง"
"ฉันจะไม่กำหนดโอเปอเรเตอร์ให้คุณ: คำจำกัดความไม่ได้ทำให้คุณฉลาดขึ้น จะดีกว่าถ้าดูโอเปอเรเตอร์ในการดำเนินการ โอเปอเรเตอร์สามารถแบ่งออกเป็นหลายกลุ่ม ซึ่งเราจะตรวจสอบในตอนนี้"
1) " ตัวดำเนินการทางคณิตศาสตร์ "
เครื่องหมาย | ตัวอย่าง | ชื่อ | คำอธิบาย (มันทำอะไร) |
---|---|---|---|
+ |
a + b |
ตัวดำเนินการเพิ่มเติม | ตัวดำเนินการเพิ่มเติม |
- |
c - d |
ตัวดำเนินการลบ | ลบหมายเลขที่สองจากหมายเลขแรก |
* |
a * t |
ตัวดำเนินการคูณ | คูณสองจำนวน |
/ |
a / b |
ผู้ดำเนินการส่วน | นำตัวเลขตัวแรกมาหารด้วยตัวที่สอง |
% |
c % d |
นำตัวเลขตัวแรกมาหารด้วยตัวที่สอง | คำนวณเศษที่เหลือหลังจากหารจำนวนแรกด้วยจำนวนที่สอง |
- |
-a |
ยูนารี ลบ | เปลี่ยนเครื่องหมายของตัวแปรเป็นตรงกันข้าม บวกเป็นลบ และลบเป็นบวก |
+ |
+a |
อูนารีพลัส | ไม่เปลี่ยนแปลงอะไร สิ่งนี้ถูกเพิ่มเพื่อชมเชยตัวดำเนินการลบแบบเอกนารี มันเป็นเพียงรูปลักษณ์ |
"ฉันจำสิ่งเหล่านี้ได้จากโรงเรียน เฟิร์มแวร์ของฉันมีหลักสูตรของโรงเรียน"
“ว่าแต่ เครื่องหมายเปอร์เซ็นต์นั่นมันอะไร เวทมนตร์บางอย่าง?”
"มันคือตัวดำเนินการ " เศษที่เหลือหลังจากการหาร " ถ้า 11 หารด้วย 5 เราจะได้ 2 และเศษที่เหลือเป็น 1 1 นี้ได้จากการเขียน 11 % 5;"
"เมื่อคุณหารจำนวนเต็มใน Java ผลลัพธ์จะเป็นจำนวนเต็มเช่นกัน ส่วนที่เหลือจากการหารจะถูกละเว้น ถ้าเราหาร 8 ด้วย 5 เราจะได้ 1"
การแสดงออก | ผลลัพธ์ | |
---|---|---|
19 / 10 |
1 | ถ้าเราหาร 19 ด้วย 10 ผลลัพธ์คือ 1 เหลือเศษ 9 |
19 % 10 |
9 | ถ้าเราหาร 19 ด้วย 10 ผลลัพธ์คือ 1 เหลือเศษ 9 |
2 / 5 |
0 | ถ้าเราหาร 2 ด้วย 5 ผลลัพธ์คือ 0 โดยเหลือเศษ 2 |
16 % 2 |
0 | ถ้าเราหาร 16 ด้วย 2 ผลลัพธ์คือ 8 เหลือเศษ 0 |
"แต่เราต้องการอะไรในโลกที่เหลือ"
"สมมติว่าคุณต้องการตรวจสอบว่าจำนวนเต็มเป็นเลขคู่หรือไม่ จากนั้นคุณสามารถเขียน:"
if (a % 2 == 0)
"และถ้าคุณต้องการตรวจสอบว่า b เป็นเลขคี่หรือไม่ คุณก็เขียนได้ว่า:"
if (b % 2 == 1)
"หรือตรวจสอบว่า d หารด้วย 3 ลงตัวหรือไม่:"
if (d % 3 == 0)
"น่าสนใจ ฉันจะจำไว้"
2) " ตัวดำเนินการเปรียบเทียบ "
เครื่องหมาย | ตัวอย่าง | ชื่อ | คำอธิบาย (มันทำอะไร) |
---|---|---|---|
< |
a < b |
น้อยกว่า | ตรวจสอบว่า a น้อยกว่า b หรือไม่ |
<= |
c <= d |
น้อยกว่าหรือเท่ากับ | ตรวจสอบว่า c น้อยกว่าหรือเท่ากับ d หรือไม่ |
> |
a > b |
มากกว่า | ตรวจสอบว่า a มากกว่า b หรือไม่ |
>= |
c >= d |
มากกว่าหรือเท่ากับ | ตรวจสอบว่า c มากกว่าหรือเท่ากับ d หรือไม่ |
== |
i == j |
เท่ากับ | ตรวจสอบว่า i เท่ากับ j หรือไม่ |
!= |
a != 0 |
ไม่เท่ากับ | ตรวจสอบว่า a ไม่เท่ากับศูนย์หรือไม่ |
"ฉันใช้ทั้งหมดนี้แล้ว"
"และอะไรคือความแตกต่างที่สำคัญระหว่างตัวดำเนินการเหล่านี้กับตัวดำเนินการทางคณิตศาสตร์"
"ถ้าเราบวกตัวเลขสองตัว เราจะได้ตัวเลข แต่ถ้าเราเปรียบเทียบตัวเลขสองตัว เราจะได้ค่าจริงหรือเท็จ"
"ถูกต้อง ผลลัพธ์ของการเปรียบเทียบคือค่า " ค่าตรรกะ " ซึ่งอย่างที่คุณทราบ จะแสดงด้วยประเภทบูลีน มีความเป็นไปได้สองอย่าง: จริงหรือเท็จ
“ใช่ ชัดเจนหมดแล้ว ฉันรู้แล้ว”
3) " ตัวดำเนินการเชิงตรรกะ "
เครื่องหมาย | ตัวอย่าง | ชื่อ | คำอธิบาย (มันทำอะไร) |
---|---|---|---|
&& |
a && b |
และ | ผลลัพธ์ของนิพจน์จะเป็นจริงก็ต่อเมื่อทั้ง a และ b เป็นจริง |
|| |
c || d |
หรือ | ผลลัพธ์ของนิพจน์จะเป็นจริงถ้า a หรือ b เป็นจริง ทั้งสองอย่างหรืออย่างน้อยหนึ่งอย่าง |
! |
!a |
ไม่ | ผลลัพธ์ของนิพจน์จะเป็นจริงก็ต่อเมื่อ a เป็นเท็จ |
"ตัวดำเนินการเชิงตรรกะสามารถใช้ได้กับตัวแปรบูลีนหรือนิพจน์เท่านั้น"
ตัวอย่าง | คำอธิบาย |
---|---|
boolean a = true; boolean b = true;if (a && b) |
เงื่อนไข if เป็นจริง ถ้าค่าทั้งสองเป็นจริงกล่าว คือ ถ้าทั้งa และ bเป็นจริง ผลลัพธ์จะเป็นจริง |
boolean a = true; boolean b = false;if (a || b) |
เงื่อนไข if เป็นจริง ถ้าอย่างน้อยหนึ่งค่าเป็นจริงกล่าว อีกนัยหนึ่ง ถ้าa หรือ bเป็นจริง ผลลัพธ์จะเป็นจริง |
boolean b = false;
|
เงื่อนไข if เป็นจริง ถ้า b ไม่เป็นความจริง กล่าวอีกนัยหนึ่ง ถ้า b เป็นเท็จผลลัพธ์จะ เป็น จริง |
int a = 2, b = 3, c = 4;
|
ถ้า a น้อยกว่า b และ a น้อยกว่า c ผลลัพธ์ของนิพจน์จะเป็นจริง a, b และ c เป็นจำนวนเต็ม แต่ผลลัพธ์ของการเปรียบเทียบจำนวนเต็มคือค่าตรรกะ (จริง, เท็จ) ซึ่งหมายความว่าเราสามารถใช้ตัวดำเนินการเชิงตรรกะได้ |
"ฉันรู้ทั้งหมดนี้แล้ว"
“จริงเหรอ?
4) " ตัวดำเนินการระดับบิต "
เครื่องหมาย | ตัวอย่าง | ชื่อ | คำอธิบาย (มันทำอะไร) |
---|---|---|---|
& |
a & b |
และ | ในระดับบิตและ |
| |
c | d |
หรือ | ในระดับบิตหรือ |
~ |
~a |
ไม่ | บิตไม่ |
^ |
a ^ b |
เอ็กซ์ออร์ | Bitwise "พิเศษหรือ" |
" ตัวดำเนินการระดับบิตดำเนินการแบบบิตต่อบิตกับจำนวนเต็ม"
"นั่นอะไร?"
"แต่ละหมายเลขจะแสดงเป็นชุดของบิต จากนั้นจึงคำนวณผลลัพธ์ดังนี้:"
"ถ้าบิตแรกของทั้งสองจำนวนเป็น 1 บิตแรกของผลลัพธ์จะเป็น 1"
"ถ้าบิตที่สองของทั้งสองจำนวนเป็น 1 บิตที่สองของผลลัพธ์จะเป็น 1 ไปเรื่อยๆ"
"นั่นเป็นเรื่องจริงสำหรับตัวดำเนินการระดับบิตทั้งหมดหรือไม่"
"มันง่ายกว่านั้นมาก บิตสามารถมีค่าได้สองค่าเท่านั้น 0 และ 1 ใช่ไหม"
"ขวา."
"จากนั้นให้คิดว่า 1 เป็นจริงและ 0 เป็นเท็จ การดำเนินการในแต่ละบิตจะเกือบจะเหมือนกันกับการดำเนินการทางตรรกะ:"
นิพจน์เชิงตรรกะ | การแสดงออกในระดับบิต |
---|---|
จริง && จริง == จริง | 1&1 == 1 |
จริง && เท็จ == เท็จ | 1&0 == 0 |
จริง || จริง == จริง | 1|1 == 1 |
จริง || เท็จ == จริง | 1|0 == 1 |
เท็จ || เท็จ = เท็จ | 0|0 == 0 |
!false == จริง | ~0 == 1 |
!true == เท็จ | ~1 == 0 |
"โอ้! ง่ายจัง"
"ใช่ อย่าลืมว่าการดำเนินการระดับบิตใช้บิตที่สอดคล้องกันจากตัวเลขสองตัว"
"ใช่ ฉันจำได้: บิตแรกของหมายเลขหนึ่งจับคู่กับบิตแรกของวินาที และผลลัพธ์จะถูกเขียนไปยังบิตแรกด้วย และบิตที่เหลือก็จะเหมือนกัน"
“ถูกต้องแล้ว คุณมีคำถามอะไรอีกไหม”
"อะไรคือ XOR และ 'พิเศษหรือ'"
"มันเหมือนเค้กชิ้นหนึ่ง: เมื่อค่าต่างกัน มันก็จริง เมื่อมันเหมือนกัน มันก็เป็นเท็จ"
นิพจน์เชิงตรรกะ | การแสดงออกในระดับบิต |
---|---|
XOR จริง จริง == เท็จ | 1 ^ 1 == 0 |
XOR เท็จ เท็จ == เท็จ | 0 ^ 0 == 0 |
XOR จริง เท็จ == จริง | 1 ^ 0 == 1 |
XOR เท็จ จริง == จริง | 0 ^ 1 == 1 |
ต่อไปนี้คือตัวอย่างเพิ่มเติมของการดำเนินการระดับบิต:
ตัวอย่าง | ตัวเลขเป็นบิต | ผลลัพธ์เป็นบิต | ผลลัพธ์ |
---|---|---|---|
5 & 3 |
0000010 1 & 0000001 1 | 0000000 1 | 1 |
7 & 2 |
000001 1 1 & 000000 1 0 | 00000010 | 2 |
5 | 9 |
00000 1 0 1 | 0000 1 00 1 | 00001101 | 13 |
5 ^ 9 |
00000 101 ^00001001 | 0000 1100 | 12 |
~9 |
~ 00001001 | 11110110 | 246 |
"ขอบคุณ บิลาโบ ตอนนี้ฉันรู้แล้ว"
"มีตัวดำเนินการระดับบิตอีกหนึ่งกลุ่ม นั่นคือตัวดำเนินการ shift:"
5) " ตัวดำเนินการกะ "
เครื่องหมาย | ตัวอย่าง | ชื่อ | คำอธิบาย (มันทำอะไร) |
---|---|---|---|
>> |
a >> b |
กะขวา | เลื่อนบิตของตัวเลข a ไปทางขวาทีละ b หลัก |
<< |
c << d |
กะซ้าย | เลื่อนบิตของตัวเลข c ไปทางซ้ายทีละหลัก |
>>> |
a >>> 2 |
กะขวาที่ไม่ได้ลงนาม | เลื่อนบิตของตัวเลข a ไปทางขวา 2 หลัก |
"นี่คือเวทมนตร์แห่งท้องถนนแบบไหนกัน?"
"จริงๆแล้วมันง่ายมาก ลองดูสิ:"
ตัวอย่าง | ตัวเลขเป็นบิต | ผลลัพธ์เป็นบิต | ผลลัพธ์ |
---|---|---|---|
10 >> 1 |
0000 101 0 >> 1 | 00000 101 | 5 |
10 >> 2 |
0000 101 0 >> 2 | 000000 10 | 2 |
10 << 1 |
0000 101 0 << 1 | 000 101 00 | 20 |
10 << 2 |
0000 101 0 << 2 | 00 101 000 | 40 |
"การเลื่อนบิตของตัวเลขไปทางซ้ายด้วย 1 นั้นเหมือนกับการคูณจำนวนด้วย 2 การเลื่อนด้วยสองหลักจะเทียบเท่ากับการคูณด้วย 4 ด้วยสามหลัก - คูณด้วย 8 เป็นต้น"
"การเลื่อนไปทางขวาสอดคล้องกับการหารด้วย 2, 4, 8, 16 ฯลฯ"
"แต่อะไรคือความแตกต่างระหว่างตัวดำเนินการ >>> และ >>"
"ความแตกต่างเมื่อทำงานกับจำนวนลบ นี่เป็นเพราะ ตัวเลขที่มีเครื่องหมายใช้บิตซ้ายสุดเพื่อระบุเครื่องหมายดังนั้น ตัวเลขที่เป็นลบจะไม่กลายเป็นลบเมื่อเลื่อนไปทางขวา ดังนั้น พวกเขาจึงคิดโอเปอเรเตอร์สองตัวขึ้นมา ตรวจสอบออก:"
การแสดงออก | ผลลัพธ์ | คำอธิบาย |
---|---|---|
1 000 1010 >> 1 | 11,000 101 _ | จำนวนลบยังคงเป็นลบ สำหรับจำนวนลบ บิตที่เข้ามาจะถูกเติมด้วย 1 วินาที |
1 000 1010 >> 2 | 111,000 10 _ | |
1 000 1010 >> 3 | 1111 000 1 | |
1 000 1010 >>> 1 | 01 000 101 | จำนวนลบไม่เป็นลบอีกต่อไป สำหรับจำนวนลบ บิตที่เข้ามาจะถูกเติมด้วย 0 |
1 000 1010 >>> 2 | 001 000 10 | |
1 000 1010 >>> 3 | 0001 000 1 |
"การเปลี่ยนแปลงไม่ได้เป็นวงจร บิตที่เคลื่อนเลยขอบซ้ายหรือขวาของตัวเลขจะถูกทิ้งไป"
6) " ผู้ดำเนินการกำหนด "
"ฉันรู้แล้วว่าการมอบหมายคืออะไร แต่ทำไมคุณถึงพูดว่า 'ผู้ดำเนินการ'"
"เพราะมีหลายตัว ☺"
โอเปอเรเตอร์ | มันหมายถึงอะไร |
---|---|
a += b; |
a = a + b; |
a -= b; |
a = a - b; |
a *= b; |
a = a * b; |
a %= b; |
a = a % b; |
a |= b; |
a = a | b; |
a &= b; |
a = a & b; |
"ฉันคิดว่าคุณเข้าใจตรรกะ"
7) " ตัวดำเนินการเพิ่มและลด "
สัญกรณ์ | ตัวอย่าง | คำอธิบาย |
---|---|---|
++ |
a++; ++b; |
เพิ่มจำนวนทีละ 1 |
-- |
d--; --i; |
ลดจำนวนหรือตัวแปรลง 1 |
"มีความแตกต่างระหว่างการใส่เครื่องหมายลบสองตัวก่อนหรือหลังตัวแปรหรือไม่"
"ใช่ มี แม้ว่าจะไม่ใหญ่มาก หากตัวแปรที่มีหนึ่งในตัวดำเนินการเหล่านี้เป็นส่วนหนึ่งของนิพจน์หรือการกำหนด แสดงว่ามีความแตกต่าง ฉันจะแสดงให้คุณเห็นตามตัวอย่าง:"
ตัวอย่าง | เกิดอะไรขึ้นจริงๆ | คำอธิบาย |
---|---|---|
int a = 3; int b = ++a; |
int a = 3; a = a + 1; int b = a; |
a จะเพิ่มทีละ 1 ก่อน จากนั้นจึงใช้ในนิพจน์ |
int a = 3; int b = a++; |
int a = 3; int b = a; a = a + 1; |
a ถูกใช้ครั้งแรกในนิพจน์ จากนั้นจึงเพิ่มขึ้นทีละ 1 |
int a = 3; return a++; |
int a = 3; int result = a; a = a + 1; return result; |
ฟังก์ชันจะส่งกลับ 3 แต่ค่าของ a จะเพิ่มขึ้น 1 |
int x = 5; x = ++x + ++x; |
int x = 5; int a = x + 1;// The first term is 6 x = a; int b = x + 1;// The second term is 7 x = b; x = a + b; |
ผลลัพธ์ในที่นี้คือ 13 อย่างแรก x จะเพิ่มขึ้น 1 และค่านี้จะแทนที่พจน์แรก แล้ว x จะเพิ่มขึ้นอีก 1 อีกครั้ง |
"ว้าว!
"ฉันดีใจที่คุณชอบมัน แต่ถ้าไม่มีการแสดงออกหรือการมอบหมาย ก็ไม่มีความแตกต่าง:"
"x++ เทียบเท่ากับ x = x + 1"
"++x เทียบเท่ากับ x = x + 1"
"ฉันจะจำมันไว้ ขอบคุณ บิลาโบ"
8) " ตัวดำเนินการแบบไตรภาค "
"ตัวดำเนินการนี้ไม่ได้ใช้เพียงหนึ่งหรือสองตัวแปรหรือนิพจน์ แต่ใช้สามตัวแปรหรือนิพจน์ทั้งหมดพร้อมกัน:"
สัญกรณ์ | รหัสเทียบเท่า: |
---|---|
a ? b : c; |
if (a) b else c |
int min = a < b ? a : b; |
if (a < b) min = a; else min = b; |
return a != null ? a.length : 0; |
if (a != null) return a.length; else return 0; |
"อืม สะดวกสุดๆ"
"ใช่ กะทัดรัดและอ่านรหัสได้ ขอให้สนุกกับการใช้มัน!"
9) " อื่นๆ "
"ไม่ว่าคอลเลคชันเพลงของคุณจะจัดระเบียบได้ดีเพียงใด คุณยังคงต้องสร้างโฟลเดอร์ "เบ็ดเตล็ด"
"ใช่ ใครก็ตามที่ต้องจัดหมวดหมู่เพลงจะเห็นด้วยอย่างยิ่ง"
"มีโอเปอเรเตอร์อีกสามคนที่ฉันอยากจะบอกคุณเกี่ยวกับ:"
สัญกรณ์ | ตัวอย่าง | คำอธิบาย |
---|---|---|
() |
(a + b) * c |
วงเล็บเพิ่มลำดับความสำคัญของตัวดำเนินการ สิ่งที่อยู่ในวงเล็บจะดำเนินการก่อน |
[] |
c [i] = c [i + 1]; |
รับองค์ประกอบอาร์เรย์ตามดัชนี |
. |
int n = a.length; |
" ตัวดำเนินการจุด " เข้าถึงตัวแปรและวิธีการของวัตถุ |
"และสุดท้าย นี่คือตารางที่สรุปลำดับความสำคัญของตัวดำเนินการ:"
ผู้ประกอบการ | ตัวอย่าง |
---|---|
ลำดับความสำคัญสูงสุด (ตัวดำเนินการจะดำเนินการตามลำดับในตารางนี้) | |
() [] . |
(a + b) c [i] = c [i] + 1 |
++ -- ~ ! + - |
i++; ++i; --j; a--; ~c !f return +a; return -a; |
* / % |
a * b c / d a % b |
+ - |
a + b c - d String s = "count"+"35"; |
>> << >>> |
a >> 3 b << 2 c >>> 3 |
< <= > >= |
a < b a <= b c > b c >= b |
== != |
a == 3 a != 0 |
& |
a & 7 |
^ |
a ^ b |
| |
a | b |
&& |
(a < b) && (a < c) |
|| |
(b != 0) || (c != 0) |
? : = |
a > 0 ? a : -a; |
= *=, /=, %= -=, += <<=. >>=, >>>= &=, ^=. |= |
|
ลำดับความสำคัญต่ำสุด (ดำเนินการล่าสุด) |
GO TO FULL VERSION