สวัสดีครับทุกท่าน เรื่อราวของโอเปอร์เรเตอร์ก็ดำเนินทางมาถึง ภาคสุดท้ายจนได้นะครับ มันยาวเลยต้องขอแยกออกให้ ท่าเขียนหน้าเดียก็ยาวมากมันจะน่าเบื่อ ครับ เรามาเข้าเรื่องกันดีกว่า บทความนี้จะเขียนเกี่ยวกับ การดำเนินการระดับบิตและ การกำหนดค่าให้ตัวแปร มันก็อยู่ในเรื่องของ ตัวดำเนินการภาษา C นะครับ เอาเป็นว่าเรามาเริ่มกันดีกว่า เออ บทความนี้เป็นบทความต่อจาก ตัวดำเนินการภาษา C 4 นะครับเข้าไปอ่านก่อนได้ มาเริ่มกันเลยดีกว่า
การดำเนินการระดับบิต
บิต (bit) ย่อมาจาก Binary digit นจำนวนมันคือหน่วยข้อมูลที่เล็กที่สุดในคอมพิวเตอร์ซึ่งจะมีค่าเป็น 0 หรือ 1 อย่างใดอย่างหนึ่งเท่านั้นโดยข้อมูล1 ไบร์ (byte) ประกอบด้วย 8 บิต ดั้งนั้นเมื่อแสดงข้อมูล 1 ไบต์ในรูปของบิตก็จะได้เป็นตัวเลข 0 หรือ 1 เรียงติดกันจำนวน 8 หลัก เช่น 11100011 เป็นต้น
โอเปอเรเตอร์ระดับบิต (Bitwise Operator) คือ โอเปอเรเตอร์ที่นำค่าแต่ละบิตของโอเปอแรนด์ 2 ตัวมากระทำกันหรืออาจเป็นโอเปอเรเตอร์ที่กระทำกับค่าในระดับบิตของโอเปอแรนด์เดียวก็ได้
ตารางต่อไปนี้เป็นโอเปอเรเตอร์ระดับบิทนะครับ
โอเปอเรเตอร์ | ความหมาย |
& | Bitwise AND |
| | Bitwise OR |
^ | Bitwise XOR (eXclusive OR) |
~ | Bitwise NOT |
>> | เลื่อนไปทางขวา(Shift Right) |
<< | เลื่อนไปทางซ้าย(Shift Left) |
ผลลัพธ์ของโอเปอเรเตอร์ &, l,~ และ ^ เป็นดังต่างรางต่อไปนี้
A | B | A&B | A|B | ~A | A^B |
1 | 1 | 1 | 1 | 0 | 0 |
1 | 0 | 0 | 1 | 0 | 1 |
0 | 1 | 0 | 1 | 1 | 1 |
0 | 0 | 0 | 0 | 1 | 0 |
Note | ||||
โอเปอเรเตอร์ &, l, ~ ที่จะใช้ดำเนินการระดับบิต จะให้ค่าผลลัพธ์เหมือนกับโอเปอเรเตอร์ &&,||,! ที่ใช้ดำเนินการทางตรรกะ เพียงเพียงแต่โอเปอรเตอร์ &, |, ~ จะกระทำในระดับบิตดังนั้นจึงอาจทำผลลัพธ์โดยรวมของโอเปอเรเตอร์ 2 กลุ่มนี้แตกต่างกันแม้ว่าจะนำมาดำเนินการกับโอเปอแรนด์ชุดเดียวกันก็ตาม ตัวอย่างเช่น
|
ตัวอย่างการทำงาของโอเปอเรเตอร์ระดับบิตที่น่าสนใจ
1.หาค่านิพจน์ 10&2
วิธีทำ | 10 = | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | ||||
2 = | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | |||||
10 & 2 = | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | =2 |
แนวคิด
การดำเนินการแบบบิตต่อบิต ซึ่งโอเปอร์เรเตอร์ & นั้นหากบิตที่น้ำมากระทำกันเป็น 1 ทั้งคู่แล้ว ผลลัพธ์จะเป็ฯส่วน 1 ส่วนกรณีอื่นๆผลลัพธ์จะได้เป็น 0 การเปรียบเทียบระดับบิตดูได้ที่ ตารางผลลัพธ์ของโอเปอเรเตอร์ ด้านบนนะครับ
การทำงานระดับบิตที่เหลือก็ประมาณนี้นะครับ การทำงานระดับบิตนั้นผลลัพธ์ออกมาจะเป็น ตัวเลข(ฐานสิบ) นะครับไม่ใช่ค่าตรรกะ เหมือนกับ การนำเนินการตรรกะ นะครับ
2. หาค่านิพจน์ ~10
แนวคิด เจ้าตัว ~ ค่ายกับ ตัว ! ในการนำเนินการตรรกะก็จริงนะครับ แต่อย่าลืมว่ามันทำงานระดับบิต ค่าออก มาเป็นตัวเลข แต่ไม่ได้ เท่ากับ –10 นะครับ เรามาดูกันเลยดีกว่า
วิธีทำ | 10 = | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | ||||
~10 = | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | = -11 |
มันเป็นการทำระดับบิต เราเลยต้องเข้าไปทำระดับบิต กลับข้อมูลของบิตครับ
การนำเนิดการของโอเปอเรเตอร์ระดับบิตนั้นยังมีอีก2 ตัวได้แก่ >> และ << ซึ่งมีความหมายว่าเลื่อนขวา และ เลื่อน ซ้าย ตามลำดับ เรามาดูกันเถอะว่ามัน ทำงานกันอย่างไรดูตามตัวอย่างข้างล่างเลยนะครับ
หาค่านิพจน์ 10 >> 2
วิธีทำ |
แนวคิด
โอเปอเรเตอร์ >> นั้นเป็นการเลื่อนบิตข้อมูลไปทางขวา จากตัวอย่างเป็นการเลื่อนบิตของค่า 0000 0000 0000 1010 ซึ่งอยู่ในรูปเลขฐานสอง ค่า10 ในเลขฐานสิบ ไปทางขวา2บิต ซึ่งเมื่อเลื่อนบิตของข้อมูลไปทางขวาแล้ว ก็จำเป็นต้องใส่บิตข้อมูลเพิ่มเข้ามาทางด้านซ้ายมือด้วย เพื่อให้จำนวนบินนั้น ครบ 16 บิตตามเดิม ซึ่งการใส่บิตข้อมูลเพิ่มเข้ามาแบ่งออกเป็น 2 กรณี คือ
- หากข้อมูลที่จะทำการเลื่อนบิต มีชนิดบ้อมูลแบบไม่คิดเครื่องหมาย(unsigned)แล้วบิตที่ได้พิ่มเข้ามาจะเป็น 0
- หากข้อมูลที่จะทำการเลื่อนบิต มีชนิดบ้อมูลแบบคิดเครื่องหมาย(signed)แล้วบิตที่ได้พิ่มเข้ามาจะเป็น 0 ถ้าข้อมูลเป็นค่า บวก หรือ ศูนย์ และท่าเป็นค่า ลบ บิตที่จะเพิ่มเข้ามาจะเป็น 1
โอเปอเรเตอร์ << ก็เช่นเดียวกัน แต่จะเลื่อนไปท้างซ้ายครับ
การกำหนดค่าให้ตัวแปร
การกำหนดค่าให้กับตัวแปรถือว่าเป็นการดำเนินการอีกรูปแบบหนึ่งใน ภาษาซี โดยใช้โอเปอเรเตอร์สำหรับกำหนดค่า(Assignment Operator) ซึ่งมีอยู่หลายชนิด ดังรายละเอียดในตารางต่อไปนี้
โอเปอเรเตอร์ | ตัวอย่างการใช้งาน | ความหมายเทียบเท่ากับ |
+= | x+=y | x=x+y |
-= | x-=y | x=x-y |
*= | x*=y | x=x*y |
/= | x/=y | x=x/y |
%= | x%=y | x=x%y |
อันนี้ผมจะไม่ลงตัวอย่างนะครับเพราะคิดว่าน่าจะเข้าใจกัน อา ภาคต่อที่ยาวนานในที่สุดก็จบสักที เรามาทำ แบบฝึกหัดกันดีกว่าว่าใหม สุดท้ายนี้หวังว่าบทความนี้จะช่วยให้ท่านเข้าใจเกียวกับ โอเปอเรเตอร์ ไม่มากก็น้อยนะครับ
0 ความคิดเห็น:
แสดงความคิดเห็น