อะไรคือความแตกต่างระหว่างตัวดำเนินการ&
และ&&
ตรรกะใน MATLAB?
อะไรคือความแตกต่างระหว่างตัวดำเนินการ&
และ&&
ตรรกะใน MATLAB?
คำตอบ:
เครื่องหมายแอมเพอร์แซนด์เดียว & เป็นตัวดำเนินการทางตรรกะ AND เครื่องหมายแอมเพอร์แซนด์คู่ && เป็นตัวดำเนินการเชิงตรรกะและอีกครั้งที่ใช้พฤติกรรมการลัดวงจร การลัดวงจรหมายถึงตัวถูกดำเนินการที่สอง (ด้านขวามือ) จะได้รับการประเมินก็ต่อเมื่อผลลัพธ์ไม่ได้ถูกกำหนดโดยตัวถูกดำเนินการแรกอย่างสมบูรณ์ (ด้านซ้ายมือ)
A & B (ประเมิน A และ B)
A && B (B จะได้รับการประเมินก็ต่อเมื่อ A เป็นจริง)
d != 0 && 1/d
vs d !=0 & 1/d
- ครั้งแรกรับประกันว่าไม่มีการหารด้วยศูนย์อย่างที่สองไม่ได้
&
ไม่ลัดวงจรหากอยู่ในif
คำสั่ง และ&&
รับอินพุตสเกลาร์ คำตอบของ @ ลอเรนด้านล่างถูกต้อง
&&
และ||
รับอินพุตสเกลาร์และลัดวงจรเสมอ |
และ&
รับอินพุตอาร์เรย์และการลัดวงจรเฉพาะในคำสั่ง if / while สำหรับการมอบหมายงานหลังห้ามลัดวงจร
ดูหน้าเอกสารเหล่านี้สำหรับข้อมูลเพิ่มเติม
&
และ|
ในคำสั่ง if / while หรือไม่? ดูเหมือนจะไม่เป็นเช่นนั้นใน R2012b และ R2014a
ดังกล่าวแล้วโดยคนอื่น ๆ&
เป็นตรรกะและผู้ประกอบการและ&&
เป็นลัดวงจรและผู้ประกอบการ พวกเขาแตกต่างกันในวิธีการประเมินตัวถูกดำเนินการรวมทั้งการทำงานบนอาร์เรย์หรือสเกลาร์หรือไม่:
&
(ตัวดำเนินการ AND) และ|
(ตัวดำเนินการ OR) สามารถทำงานบนอาร์เรย์ได้อย่างชาญฉลาด&&
และ||
เป็นเวอร์ชันลัดวงจรที่ตัวถูกดำเนินการตัวที่สองจะได้รับการประเมินก็ต่อเมื่อผลลัพธ์ไม่ได้ถูกกำหนดโดยตัวถูกดำเนินการตัวแรกอย่างสมบูรณ์ สิ่งเหล่านี้สามารถทำงานบนสเกลาร์เท่านั้นไม่ใช่อาร์เรย์&
เป็นตัวดำเนินการเชิงตรรกะแบบ elementwise ในขณะที่&&
เป็นตัวดำเนินการลัดวงจรเชิงตรรกะ (ซึ่งสามารถทำงานบนสเกลาร์เท่านั้น)
ตัวอย่างเช่น (ให้อภัยไวยากรณ์ของฉัน)
ถ้า..
A = [True True False True]
B = False
A & B = [False False False False]
..หรือ..
B = True
A & B = [True True False True]
สำหรับ&&
ตัวถูกดำเนินการด้านขวาจะคำนวณก็ต่อเมื่อตัวถูกดำเนินการด้านซ้ายเป็นจริงและผลลัพธ์เป็นค่าบูลีนเดียว
x = (b ~= 0) && (a/b > 18.5)
หวังว่าจะชัดเจน
bitand
เป็นตัวดำเนินการตรรกะ AND ในระดับบิตใน MATLAB
&& และ || เป็นตัวดำเนินการไฟฟ้าลัดวงจรที่ทำงานบนสเกลาร์ & และ | ดำเนินการกับอาร์เรย์และใช้การลัดวงจรเฉพาะในบริบทของนิพจน์if
หรือwhile
วนซ้ำ
กฎที่ดีของหัวแม่มือเมื่อสร้างข้อโต้แย้งสำหรับการใช้งานในงบเงื่อนไข (IF ในขณะที่อื่น ๆ ) คือการเสมอใช้ && / || แบบฟอร์มเว้นแต่จะมีเหตุผลที่ดีมากที่จะไม่ทำ มีสองเหตุผล ...
การทำเช่นนี้แทนที่จะใช้ความละเอียดของเวกเตอร์ใน & และ | ของ MATLAB นำไปสู่โค้ดที่ละเอียดกว่าเล็กน้อย แต่ LOT ปลอดภัยและดูแลรักษาง่ายกว่า
r((r<2)&(r<2))
"
&
สามารถทำงานบนอาร์เรย์ แต่&&
สามารถทำงานบนสเกลาร์เท่านั้น