ฉันเพิ่งเริ่มใช้ C # และไม่พบตัวดำเนินการXNORเพื่อให้ตารางความจริงนี้:
aba XNOR ข ---------------- อปท TFF FTF FFT
มีตัวดำเนินการเฉพาะสำหรับสิ่งนี้หรือไม่? หรือฉันต้องใช้! (A ^ B)?
ฉันเพิ่งเริ่มใช้ C # และไม่พบตัวดำเนินการXNORเพื่อให้ตารางความจริงนี้:
aba XNOR ข ---------------- อปท TFF FTF FFT
มีตัวดำเนินการเฉพาะสำหรับสิ่งนี้หรือไม่? หรือฉันต้องใช้! (A ^ B)?
คำตอบ:
XNOR คือความเท่าเทียมกันของบูลีน ใช้A == B.
นี่เป็นสิ่งที่พลาดได้ง่ายเนื่องจากความเท่าเทียมกันไม่ได้ใช้กับบูลีนโดยทั่วไป และมีภาษาที่ไม่จำเป็นต้องใช้งานได้ ตัวอย่างเช่นใน C ค่าสเกลาร์ที่ไม่ใช่ศูนย์จะถือว่าเป็นจริงดังนั้นค่า "จริง" สองค่าจึงไม่เท่ากัน แต่คำถามถูกแท็กค#ซึ่งเราจะบอกว่าบูลีนที่ประพฤติตัวดี
โปรดทราบว่าสิ่งนี้ไม่ได้เน้นการดำเนินการแบบบิตตามที่คุณต้องการ0x1234 XNOR 0x5678 == 0xFFFFBBB3(สมมติว่าเป็น 32 บิต) เพื่อที่คุณจะต้องสร้างขึ้นจากการดำเนินงานอื่น ๆ ~(A^B)เช่น (หมายเหตุ: ~ไม่ใช่!)
!ผู้ประกอบการสามารถใช้ในการแปลงintเป็นที่ 'มีความประพฤติดี' !a==!bbooleans:
!!(ที่สองตรรกะ "ไม่ได้" ผู้ประกอบการ) normalizes ค่าสเกลาใด ๆ กับหรือ0 1
XOR = A หรือ B แต่ไม่ใช่ A & B หรือไม่เท่ากัน (ไม่สามารถเท่ากับ [! =])
ดังนั้น XNOR จึงเป็นตัวเลือกที่แน่นอนและสามารถแทนค่าได้ง่ายด้วย == หรือ ===
อย่างไรก็ตามกรณีที่ไม่ใช่บูลีนทำให้เกิดปัญหาเช่นในตัวอย่างนี้:
a = 5
b = 1
if (a == b){
...
}
ให้ใช้สิ่งนี้แทน:
a = 5
b = 1
if((a && b) || (!a && !b)){
...
}
หรือ
if(!(a || b) && (a && b)){
...
}
ตัวอย่างแรกจะคืนค่าเป็นเท็จ (5! = 1) แต่ค่าที่สองจะส่งคืนค่าของ true (a [value?] และ b [value?] ส่งคืนบูลีนเดียวกันคือ true (value = ไม่ใช่ 0 / มีค่า )
ตัวอย่าง alt เป็นเพียงประตูย้อนกลับ (a || b) &&! (a && b) (XOR)
ไม่จำเป็นต้องใช้ !(A^B)
แม้ว่าฉันคิดว่าคุณสามารถใช้ตัวดำเนินการมากเกินไปเพื่อสร้าง XNOR ของคุณเอง
คุณสามารถใช้===โอเปอเรเตอร์สำหรับ XNOR เพียงแค่คุณต้องแปลงaและbเป็นบูล
if (!!a === !!b) {...}
===ตัวดำเนินการ
===ตัวดำเนินการที่ไม่บีบบังคับคือจาวาสคริปต์และค่าสองเท่า!!ก่อนค่าในการประเมินผลไม่ถูกต้องใน c # เช่นกัน
==ชื่อบูลีนตัวถูกดำเนินการ ...