อะไรคือความแตกต่างระหว่างตัวดำเนินการ&และ&&ตรรกะใน MATLAB?
อะไรคือความแตกต่างระหว่างตัวดำเนินการ&และ&&ตรรกะใน MATLAB?
คำตอบ:
เครื่องหมายแอมเพอร์แซนด์เดียว & เป็นตัวดำเนินการทางตรรกะ AND เครื่องหมายแอมเพอร์แซนด์คู่ && เป็นตัวดำเนินการเชิงตรรกะและอีกครั้งที่ใช้พฤติกรรมการลัดวงจร การลัดวงจรหมายถึงตัวถูกดำเนินการที่สอง (ด้านขวามือ) จะได้รับการประเมินก็ต่อเมื่อผลลัพธ์ไม่ได้ถูกกำหนดโดยตัวถูกดำเนินการแรกอย่างสมบูรณ์ (ด้านซ้ายมือ)
A & B (ประเมิน A และ B)
A && B (B จะได้รับการประเมินก็ต่อเมื่อ A เป็นจริง)
d != 0 && 1/dvs 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))"
&สามารถทำงานบนอาร์เรย์ แต่&&สามารถทำงานบนสเกลาร์เท่านั้น