ฉันเป็นบิตสับสนโดยเอกสาร # 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 == 0x00
0xff | 0x00 == 0xff
และ&&
และ||
นำไปใช้กับเงื่อนไขและให้ค่าปกติของเงื่อนไข คือและtrue
false
ยกตัวอย่างเช่นในขณะที่true && false == false
true || false == true
ดังนั้น&&
และ||
อาจเรียกได้ว่าโอเปอเรเตอร์ที่มีเงื่อนไขแม้ว่าจะไม่ใช่คำศัพท์ปกติในหมู่โปรแกรมเมอร์
แน่นอนโปรแกรมเมอร์ C, C ++, Java และ C # ทุกคนรู้ทุกอย่าง แต่ฉันเดาว่าการเข้าใจผิดเกิดขึ้นเพราะ "โอเปอเรเตอร์ที่มีเงื่อนไข" ไม่ใช่คำที่นักโปรแกรมเมอร์ใช้บ่อย
|
มันสามารถใช้แทนกัน||
ได้แม้ว่าในหลาย ๆ กรณีพวกเขาสามารถเปลี่ยนได้โดยไม่มีการเปลี่ยนแปลงที่ชัดเจนในพฤติกรรมของโปรแกรม