ตัวดำเนินการภาษา C 5

ภาษา cสวัสดีครับทุกท่าน เรื่อราวของโอเปอร์เรเตอร์ก็ดำเนินทางมาถึง ภาคสุดท้ายจนได้นะครับ มันยาวเลยต้องขอแยกออกให้ ท่าเขียนหน้าเดียก็ยาวมากมันจะน่าเบื่อ ครับ เรามาเข้าเรื่องกันดีกว่า บทความนี้จะเขียนเกี่ยวกับ การดำเนินการระดับบิตและ การกำหนดค่าให้ตัวแปร มันก็อยู่ในเรื่องของ ตัวดำเนินการภาษา 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 กลุ่มนี้แตกต่างกันแม้ว่าจะนำมาดำเนินการกับโอเปอแรนด์ชุดเดียวกันก็ตาม ตัวอย่างเช่น

การดำเนินการตรรกะ
10 && 1 = ?
ผลลัพธ์ 10 && 1 = 1

ค่าตรรกะของ 10 คือจริง

ค่าตรรกะของ 1 คือจริง

ฉนั้นค่าตรรกะคำตอบคือ จริง หรือ 1 นั้นเอง

การดำเนินระดับบิต
10 & 1 = ?

10 ในรูปแบบบิตคือ 0000 0000 0000 1010

1 ในรูปแบบบิตคือ   0000 0000 0000 0001

ผลลัทธ์ = 0000 0000 0000 0000 = 0

ตัวอย่างการทำงาของโอเปอเรเตอร์ระดับบิตที่น่าสนใจ

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

วิธีทำ






ภาษา c

แนวคิด

โอเปอเรเตอร์ >> นั้นเป็นการเลื่อนบิตข้อมูลไปทางขวา จากตัวอย่างเป็นการเลื่อนบิตของค่า 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 ความคิดเห็น:

แสดงความคิดเห็น