คำถามเกี่ยวกับ Comparison Operator กับ Bitwise Operator ^^
รู้ไม๊ว่า ต่างกันตรงไหน
Code:
1. bool result1 = a && b;
2. bool result2 = a & b;
คำตอบออกมา result1 = result2 ตลอด แต่ถามว่า มันต่างกันตรงไหน
อืม น่าคิดดี เพราะถ้ามันเหมือนกันทุกประการ แล้วเขาจะมีไว้ 2 แบบ ทำไมเนอะ
คำตอบ ขอ hide ไว้หน่อยนึง เด๋วมีการแอบดูเฉลยก่อน ^^'
[hide=1]
ต่างกันที่กระบวนการทำงาน
Comparison Operator จะทำงานแบบ Shot Circuit ผิดกับ Bitwise Operator
ยกตัวอย่างดีกว่า
กรณีของ Comparison Operator เช่น &&
Code:
bool result1 = FALSE && a;
bool result2 = FALSE & a;
สิ่งที่เกิดขึ้นคือ เมื่อ compiler ทำงานถึง FALSE แล้วตามด้วยการเจอ Comparison Operator && จะทำการสรุปทันทีว่า result1 = FALSE (FALSE and กับอะไรก็ได้ FALSE เสมอ) โดยไม่สนใจ a อีกต่อไป ผิด กับ Bitwise Operator ที่จะได้ค่า result2 มาจากการ and กันจริงๆ ของ ตัวแปร
เอาละคราวนี้ ก็คงสงสัยว่า มันก็ถูกแล้วนี่ คำตอบตรงก็ดีแล้ว short circuit ก็ไวดีนี่ ไม่ต้องสนใจประโยคหลังจาก Comparison Operator ถ้า short circuit <<< แต่นี่แหละ จุดเริ่มต้นของปัญหา
พิจารณา
[code]bool takeSomething()
{