XOR (Function)

XOR หรือ Exclusive Or เป็นฟังก์ชัน Logical คล้ายคลึงกับการใช้ OR แต่ก็มีบางส่วนที่ไม่แตกต่างกันบ้าง เล็กน้อย

สารบัญเนื้อหา

XOR

XOR(เงื่อนไข1, [เงื่อนไข2],…)

ก็เหมือนกับ OR นั่นคือ ต้องระบุตรรกะ อย่างน้อย 1 ค่า และจะส่งลัพธ์การทดสอบออกมาเป็น True หรือ False เท่านั้น

(เราสามารถใช้เงื่อนไขได้ถึง 254 เงื่อนไข)

อาร์กิวเมนต์จะต้องสามารถหาค่าเป็นค่าตรรกะได้ เช่น TRUE หรือ FALSE หรืออยู่ใน อาร์เรย์ หรือการอ้างอิงที่มีค่าตรรกะ

ถ้าอาร์กิวเมนต์อาร์เรย์หรืออาร์กิวเมนต์การอ้างอิงเป็นเซลล์ข้อความหรือเซลล์ว่าง ค่าเหล่านั้นจะถูกละเว้นไป

ถ้าช่วงที่ระบุไม่มีค่าตรรกะ XOR จะส่งผลลัพธ์เป็น #VALUE! (ค่าผิดพลาด)

OR VS XOR

ถึงแม้ว่าจะมีความคล้ายคลึงกับ ฟังก์ชัน OR อย่างมาก แต่ในความเป็นจริง จะมีบางอย่างไม่เหมือนกัน จะยกตัวอย่างดังนี้

สำหรับ OR นั้น จะให้ผลลัพธ์เป็นจริง (True) แค่มี 1 เงื่อนไขที่เป็นจริงก็พอแล้ว

แต่ Exclusive Or นั้น ถ้าจำนวนเงื่อนไขที่เป็นจริง (True) เป็นเลขคี่ จะให้ผลลัพธ์เป็น จริง

ถ้าจำนวนเงื่อนไขที่เป็นจริง (True) เป็นเลขคู่ หรือ จะให้ผลลัพธ์เป็น เท็จ

อ้าว งง งงละสิ ตอนที่เห็นข้อกำหนดของฟังก์ชันนี้แรก ๆ ก็งงเหมือนกัน

ก่อนอื่น ดูภาพประกอบก่อน ตัวอย่างนี้สร้างเงื่อนไขมา 4 เงื่อนไข โดยให้ค่า True / False  ตามที่เห็น

XOR
ตัวอย่างความแตกต่างระหว่าง OR และ XOR

ดูที่ลำดับที่ 1 จากเงื่อนไข 4 เงื่อนไข เป็น True ทั้ง 4 เงื่อนไข ถ้าเป็นฟังก์ชัน OR จะเป็น True (เพราะสำหรับ OR แล้ว ถ้ามีเงื่อนไขใดเงื่อนไขหนึ่งเป็น True ก็จะเป็น True ทั้งหมด ดังนั้น ในลำดับที่ 1 – 4 ผลลัพธ์ของ OR จะเป็น True ทั้งหมด เพราะมีเงื่อนไขที่เป็น True อย่างน้อย 1 เงื่อนไข

แต่ในลำดับที่ 1 ถ้าใช้ฟังก์ชัน XOR ก็จะได้ False เพราะว่า จำนวนเงื่อนไขที่เป็นจริง (True) เป็นเลขคู่ (คือ 4 เงื่อนไขเป็น True)เช่นเดียวกับลำดับที่ 3 ซึ่งมี 2 เงื่อนไขเป็น True จึงได้ผลลัพธ์เป็น False

ในขณะที่ ลำดับที่ 2 และ 4 มีเงื่อนไขที่เป็น True 3 และ 1 เงื่อนไข ซึ่งเป็นจำนวนเงื่อนไขเลขคี่ จึงให้ผลลัพธ์เป็น True

แล้วการวางลำดับ คู่ คี่ มีไว้ทำไม? แล้วใครจะเป็นคนใช้

นั่นสิ พอลองค้นหาใน google ก็เห็นว่าไปในทางการเขียนโปรแกรมเป็นส่วนใหญ่ เช่น

https://blog.loginradius.com/engineering/how-does-bitwise-xor-work/

แต่จะเทียบอย่างนี้

สมมติเหตุการณ์ทดสอบความมีสติของเรา ด้วยสถานการณ์ 3 อย่างคือ

ฝนตกหรือไม่ / เราอยู่ในบ้านหรือเปล่า / และ เรากางร่มหรือเปล่า

โดยสรุปผลเป็น “ถูกแล้ว” ถ้าเป็น True และ “บ้าเปล่า?” ถ้าเป็น False

XOR

ดูสถานการณ์แรก ฝนตก อยู่ในบ้าน เรากางร่ม ผลลัพธ์ก็จะเป็น “บ้าเปล่า?” ใครจะไปกางร่มในบ้านตอนฝนตก? จริงมั้ยครับ อันนี้ดู make sense หน่อย แต่จะใช้ฟังก์ชันไหนก็ไม่ต่างกัน

แต่มาดูอีก 2 สถานการณ์

ฝนตก เราอยู่ในบ้าน โดยไม่กางร่ม ผลลัพธ์ก็จะเป็น “ถูกแล้ว” เราจะไปกางร่มทำไม หรือ เราจะออกนอกบ้านทำไมให้เปียกเปล่า ๆ

หรือ

ฝนตก เราอยู่นอกบ้าน กางร่ม ผลลัพธ์ก็จะเป็น “ถูกแล้ว” ถึงจะฝนตก และ อยู่นอกบ้าน แต่อย่างน้อยก็มีร่มกันฝน

2 สถานการณ์นี้ ถ้าเราใช้ OR จะกลายเป็น “บ้าเปล่า?” เพราะ มีเงื่อนไขหนึ่งเป็น True

พอเป็นแบบนี้ การใช้ Exclusive Or ก็ดูสมเหตุผลขึ้นมาทันที

ความคิดเห็น