ฉันเป็นบิตสับสนโดยเอกสาร # MSDN C ซึ่งระบุว่า&และ|ผู้ประกอบการเชิงตรรกะและที่&&และ||ผู้ประกอบการที่มีเงื่อนไข
ฉันให้โทร&&, ||และ!ดำเนินการทางตรรกะดังนั้นผมผิดหรือเปล่า?
ฉันเป็นบิตสับสนโดยเอกสาร # MSDN C ซึ่งระบุว่า&และ|ผู้ประกอบการเชิงตรรกะและที่&&และ||ผู้ประกอบการที่มีเงื่อนไข
ฉันให้โทร&&, ||และ!ดำเนินการทางตรรกะดังนั้นผมผิดหรือเปล่า?
คำตอบ:
ฉันเป็นบิตสับสนโดยเอกสาร # MSDN C ซึ่งระบุว่า
&และ|ผู้ประกอบการเชิงตรรกะและที่&&และ||ผู้ประกอบการที่มีเงื่อนไข ฉันให้โทร&&,||และ!ดำเนินการทางตรรกะดังนั้นผมผิดหรือเปล่า?
ไม่มี คุณถูกต้อง
มีข้อผิดพลาดเล็ก ๆ น้อย ๆ ส่วนใหญ่ที่ไม่สำคัญในระบบการตั้งชื่อเอกสาร MSDN; ฉันพยายามทำให้พวกเขาออกมาให้มากที่สุดเท่าที่จะทำได้ แต่ในกรณีที่มันไม่ผิดอย่างผิดปกติและทำให้เข้าใจผิดมันไม่ได้ใช้เวลาอย่างชาญฉลาดเสมอไป ไปที่สเปคถ้าคุณต้องการคำสั่งที่ชัดเจนเกี่ยวกับชื่อของคุณสมบัติ C #
ดังนั้น: หน่วยงานที่เกี่ยวข้องคือข้อกำหนด C # ซึ่งระบุไว้ในหัวข้อ 7.11:
เครื่องหมาย
&,^และ,|เรียกว่าตัวดำเนินการเชิงตรรกะ
จากนั้นจะทำการแยกตัวดำเนินการทางตรรกะภายในออกเป็นจำนวนเต็มการแจงนับบูลีนและ nullable-Boolean ตัวดำเนินการทางตรรกะ นอกจากนี้ยังมีตัวดำเนินการเชิงตรรกะที่ผู้ใช้กำหนด ดูรายละเอียดสเปค
ในมาตรา 7.12 เรามี
ตัวดำเนินการ
&&และ||เรียกว่าตัวดำเนินการโลจิคัลแบบมีเงื่อนไข พวกเขาจะเรียกว่าตัวดำเนินการตรรกะ "ลัดวงจร"
ดังนั้นทั้งหมดของพวกเขาเป็นตัวดำเนินการเชิงตรรกะ บางส่วนของพวกเขาเป็นผู้ประกอบการตรรกะเงื่อนไข
ทำให้ตัวดำเนินการเชิงตรรกะเงื่อนไขอะไร บางคนอาจคาดเดาอย่างกว้างขวางว่าเป็นเพราะพวกเขามักจะใช้ในข้อความสั่งเงื่อนไข ( if) หรือนิพจน์เงื่อนไข ( ? :) เหตุผลที่แท้จริงได้รับจากข้อกำหนด:
ตัวดำเนินการ
&&และ||ตัวดำเนินการเป็นรุ่นที่มีเงื่อนไขของ&และ|ตัวดำเนินการ: การดำเนินการที่x && yสอดคล้องกับการดำเนินการx & yยกเว้นว่าyจะได้รับการประเมินก็ต่อเมื่อxไม่ใช่เท็จ การดำเนินการx || yสอดคล้องกับการดำเนินการx | yยกเว้นว่าyจะได้รับการประเมินก็ต่อเมื่อxไม่เป็นความจริง
ตัวดำเนินการโลจิคัลแบบมีเงื่อนไขจะถูกตั้งชื่อเนื่องจากตัวถูกดำเนินการทางด้านขวาถูกประเมินตามเงื่อนไขขึ้นอยู่กับค่าของตัวถูกดำเนินการทางด้านซ้าย
เราสามารถมองเห็นได้มากขึ้นเต็มตาโดยสังเกตว่าดำเนินการทางตรรกะเงื่อนไขเป็นเพียง "น้ำตาลประโยค" สำหรับการแสดงออกเงื่อนไข x && yเป็นเพียงวิธีที่สะดวกสบายมากขึ้นในการเขียนx ? y : falseและเป็นเพียงวิธีที่สะดวกสบายมากขึ้นในการเขียน x || y นิพจน์เชิงตรรกะแบบมีเงื่อนไขเป็นนิพจน์แบบมีเงื่อนไขจริง ๆx ? true : y
นอกจากนี้ยังมีรูปแบบที่ผู้ใช้กำหนดของตัวดำเนินการเชิงตรรกะที่มีเงื่อนไขและมันก็ยุ่งยากเล็กน้อย ดูข้อกำหนดสำหรับรายละเอียด
อ่านเพิ่มเติมถ้าเรื่องนี้คุณสนใจ:
ใน C # นี่คือ ตัวดำเนินการเชิงตรรกะทั้งหมด
int x = 0xABCD & 0xFF // x == 0xCD
&&และ||ถูกเรียกว่า " ตัวดำเนินการเชิงตรรกะแบบมีเงื่อนไข " เพราะมันจะลัดวงจร
bool someOtherCondition = true;
if (x == 0xEF && someOtherCondition) // someOtherCondition is not evaluated,
// because x == 0xEF is false
โปรดทราบว่าคำศัพท์นี้แตกต่างจากภาษาเป็นภาษา ใน C และ C ++ &&และ||เป็นเพียงตัวดำเนินการเชิงตรรกะ ใน Java &และ|จะเรียกว่าผู้ประกอบการ Bitwiseขณะที่ C และ C ++ classifies พวกเขาเป็นผู้ประกอบการทางคณิตศาสตร์
ประเด็นก็คือ&และ|เป็นผู้ประกอบการระดับบิตซึ่งหมายความว่าพวกเขาจะนำไปใช้และผลผลิตค่าสตริงบิต และ bitwise เป็นคำที่ใช้กันมากในหมู่โปรแกรมเมอร์
ยกตัวอย่างเช่นในขณะที่0xff & 0x00 == 0x000xff | 0x00 == 0xff
และ&&และ||นำไปใช้กับเงื่อนไขและให้ค่าปกติของเงื่อนไข คือและtruefalse
ยกตัวอย่างเช่นในขณะที่true && false == falsetrue || false == true
ดังนั้น&&และ||อาจเรียกได้ว่าโอเปอเรเตอร์ที่มีเงื่อนไขแม้ว่าจะไม่ใช่คำศัพท์ปกติในหมู่โปรแกรมเมอร์
แน่นอนโปรแกรมเมอร์ C, C ++, Java และ C # ทุกคนรู้ทุกอย่าง แต่ฉันเดาว่าการเข้าใจผิดเกิดขึ้นเพราะ "โอเปอเรเตอร์ที่มีเงื่อนไข" ไม่ใช่คำที่นักโปรแกรมเมอร์ใช้บ่อย
|มันสามารถใช้แทนกัน||ได้แม้ว่าในหลาย ๆ กรณีพวกเขาสามารถเปลี่ยนได้โดยไม่มีการเปลี่ยนแปลงที่ชัดเจนในพฤติกรรมของโปรแกรม