-
คำถามเกี่ยวกับ Comparison Operator กับ Bitwise Operator ^^
Quote:
&& กับ &
|| กับ | [/b]
รู้ไม๊ว่า ต่างกันตรงไหน
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()
{
-
ตอบให้ละกัน
& เปน BitWise operator
เปนการเช็กที่ จำนวน 'bit' (จิงๆ แล้วนิยมใช้ใน radix 2 (เลขฐาน 2))
โดยเปรียบเทียบเปน ถ้ามี bitตำแหน่งนั้น จะ 0 หรือ 1 ก้ถือเปน 1 (เช่น 7 มี จำนวน 3bit (111) )
จากที่เจ้าของกระทุ้เขียนนะ
1. bool result1 = a && b;
2. bool result2 = a & b;
ถ้าสมมุต a และ b เปน
1 & 1
ผลก้จะออกมาเหมือนกัน เพราะว่า
& ความยาว bit เท่ากัน คือ 1bit และ 1 bit (true)
&& เลข 1 & 1 ก้ได้ 1(true)
เอาละ อยากเหนความแตกต่างชิมิ
ลองเปน
3 & 4
ผลจะออกมาต่างกันละ เพราะว่า
& ความยาว bit ไม่เท่าคือ เลข3 = 2bits(11) และ เลข4 = 3bits(100) // ใครไม่เข้าใจ bit ก้ เอ่อ -*-
&& เลข 3 & 4 ก้ถือเปน 1(true)
-
คห. ข้างบนมาตอบซะแล้ว
และเราคิดว่าถูกด้วย
&& เป็นการ AND กันของข้อมู
ส่วน & เป็นการเช็คจำนวนบิต
ทั้งสองวิธี ถ้าคิดเองก็เปลี่ยนเป็นแบบ เลขฐานสองก่อนถึงจะคิดได้