ฉันเพิ่งเริ่มใช้ 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==!b
booleans:
!!
(ที่สองตรรกะ "ไม่ได้" ผู้ประกอบการ) 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 # เช่นกัน
==
ชื่อบูลีนตัวถูกดำเนินการ ...