Operators ตัวดำเนินการ ภาษา C คือสัญลักษณ์ที่บอกให้คอมไพเลอร์ดำเนินการฟังก์ชันทางคณิตศาสตร์หรือตรรกะที่เฉพาะเจาะจง ภาษาซีมีโอเปอเรเตอร์ในตัวมากมายและมีโอเปอเรเตอร์ประเภทต่อไปนี้ −

  • Arithmetic Operators (ตัวดำเนินการคณิตศาสตร์)
  • Relational Operators (ตัวดำเนินการแบบสัมพันธ์)
  • Logical Operators (ตัวดำเนินการทางตรรกะ)
  • Bitwise Operators (ตัวดำเนินการแบบบิต)
  • Assignment Operators (ตัวดำเนินการกำหนดค่า)
  • Misc Operators (ตัวดำเนินการกำหนดค่าแบบผสม)


ในบทนี้ เราจะพิจารณาถึงวิธีการทำงานของโอเปอเรเตอร์แต่ละตัว

Arithmetic Operators (ตัวดำเนินการคณิตศาสตร์)


ตารางต่อไปนี้แสดงตัวดำเนินการเลขคณิตทั้งหมดที่รองรับโดยภาษา C สมมติว่าตัวแปร A มีค่า 10 และตัวแปร B มีค่าเท่ากับ 20 จากนั้น −

โอเปอเรเตอร์คำอธิบายตัวอย่าง
+บวก (Addition)A + B = 30
ลบ (Subtraction)A − B = -10
*คูณ (Multiplication)A * B = 200
/หาร (Division)B / A = 2
%หารเอาผลลัพธ์เฉพาะเศษ (Modulus)B % A = 0
++เพิ่มค่าจำนวนเต็มทีละหนึ่งA++ = 11
ลดค่าจำนวนเต็มทีละหนึ่งA– = 9


Relational Operators (ตัวดำเนินการแบบสัมพันธ์)


ตารางต่อไปนี้แสดงตัวดำเนินการเชิงสัมพันธ์ทั้งหมดที่รองรับโดย C สมมติว่าตัวแปร A มีค่า 10 และตัวแปร B มีค่าเท่ากับ 20:

โอเปอเรเตอร์คำอธิบายตัวอย่าง
==ตรวจสอบว่าค่าของตัวถูกดำเนินการสองตัวเท่ากันหรือไม่ ถ้าใช่ เงื่อนไขจะกลายเป็นจริง(A == B) ไม่เป็นความจริง
!=ตรวจสอบว่าค่าของตัวถูกดำเนินการสองตัวเท่ากันหรือไม่ หากค่าไม่เท่ากัน เงื่อนไขจะกลายเป็นจริง(A != B) เป็นจริง
>ตรวจสอบว่าค่าของตัวถูกดำเนินการทางซ้ายมากกว่าค่าของตัวถูกดำเนินการทางขวาหรือไม่ ถ้าใช่ เงื่อนไขจะกลายเป็นจริง(A > B) ไม่เป็นความจริง
<ตรวจสอบว่าค่าของตัวถูกดำเนินการทางซ้ายน้อยกว่าค่าของตัวถูกดำเนินการทางขวาหรือไม่ ถ้าใช่ เงื่อนไขจะกลายเป็นจริง(A < B) เป็นจริง
>=ตรวจสอบว่าค่าของตัวถูกดำเนินการทางซ้ายมากกว่าหรือเท่ากับค่าของตัวถูกดำเนินการทางขวาหรือไม่ ถ้าใช่ เงื่อนไขจะกลายเป็นจริง(A >= B) ไม่เป็นความจริง
<=ตรวจสอบว่าค่าของตัวถูกดำเนินการทางซ้ายน้อยกว่าหรือเท่ากับค่าของตัวถูกดำเนินการทางขวาหรือไม่ ถ้าใช่ เงื่อนไขจะกลายเป็นจริง(A <= B) เป็นจริง


Logical Operators (ตัวดำเนินการทางตรรกะ)


ตารางต่อไปนี้แสดงตัวดำเนินการเชิงตรรกะทั้งหมดที่สนับสนุนโดยภาษา C สมมติว่าตัวแปร A มีค่า 1 และตัวแปร B มีค่า 0 แล้ว −

โอเปอเรเตอร์คำอธิบายตัวอย่าง
&&และ (and) จะให้ผลลัพธ์เป็นจริงเมื่อเงื่อนไขทั้งสองเป็นจริง แต่ถ้าเงื่อนไขใดเป็นเท็จ หรือทั้งสองเงื่อนไขเป็นเท็จจะทำให้ผลลัพธ์เป็นเท็จ(A && B) เป็นเท็จ
||หรือ (or) จะให้ผลลัพธ์เป็นจริงเมื่อเงื่อนไขใดเงื่อนไขหนึ่งเป็นจริง หรือเป็นจริงทั้งสองเงื่อนไข แต่ถ้าเป็นเท็จทั้งสองเงื่อนไขจะทำให้ผลลัพธ์เป็นเท็จ(A || B) เป็นจริง
!ไม่ใช่ (not) จะให้ผลลัพธ์เป็นจริงเมื่อเงื่อนไขหลัง not เป็นเท็จ แต่ถ้าเงื่อนไขหลัง not เป็นจริงจะทำให้ผลลัพธ์เป็นเท็จ !(A && B) เป็นจริง


Bitwise Operators (ตัวดำเนินการแบบบิต)


ตัวดำเนินการ Bitwise ทำงานบนบิตและดำเนินการแบบทีละบิต ตารางความจริงของ &, |, และ ^ มีดังต่อไปนี้ −

pqp & qp | qp ^ q
00000
01011
11110
10011


สมมติว่า A = 60 และ B = 13 ในรูปแบบไบนารี จะเป็นดังนี้ −

A = 0011 1100

B = 0000 1101

—————–

A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

~A = 1100 0011

ตารางต่อไปนี้แสดงรายการตัวดำเนินการระดับบิตที่รองรับโดย C สมมติว่าตัวแปร ‘A’ มีค่า 60 และตัวแปร ‘B’ มีค่าเท่ากับ 13 ดังนั้น:

โอเปอเรเตอร์คำอธิบายตัวอย่าง
&ไบนารีและตัวดำเนินการคัดลอกบิตไปยังผลลัพธ์หากมีอยู่ในตัวถูกดำเนินการทั้งสอง(A & B) = 12 คือ 0000 1100
|Binary OR Operator คัดลอกบิตหากมีอยู่ในตัวถูกดำเนินการอย่างใดอย่างหนึ่ง(A | B) = 61 เช่น 0011 1101
^Binary XOR Operator คัดลอกบิตหากตั้งค่าไว้ในตัวถูกดำเนินการตัวเดียว แต่ไม่ใช่ทั้งสองอย่าง(A ^ B) = 49 เช่น 0011 0001
~ตัวดำเนินการเสริมของ Binary One เป็นแบบเอกพจน์และมีเอฟเฟกต์ของการ ‘พลิก’ บิต(~A ) = ~(60) เช่น -0111101
<<ตัวดำเนินการ Shift ซ้ายไบนารี ค่าตัวถูกดำเนินการทางซ้ายจะถูกย้ายไปทางซ้ายตามจำนวนบิตที่ระบุโดยตัวถูกดำเนินการทางขวาA << 2 = 240 คือ 1111 0000
>>ตัวดำเนินการ Shift ขวาแบบไบนารี ค่าตัวถูกดำเนินการทางซ้ายจะถูกย้ายไปทางขวาตามจำนวนบิตที่ระบุโดยตัวถูกดำเนินการทางขวาA >> 2 = 15 คือ 0000 1111


Assignment Operators (ตัวดำเนินการกำหนดค่า)


ตารางต่อไปนี้แสดงรายการตัวดำเนินการมอบหมายที่รองรับโดยภาษา C

โอเปอเรเตอร์คำอธิบายตัวอย่าง
=ตัวดำเนินการมอบหมายอย่างง่าย กำหนดค่าจากตัวถูกดำเนินการด้านขวาไปยังตัวถูกดำเนินการด้านซ้ายC = A + B จะกำหนดค่าของ A + B ให้กับ C
+=ตัวดำเนินการเพิ่ม AND เพิ่มตัวถูกดำเนินการทางขวาให้กับตัวถูกดำเนินการทางซ้าย และกำหนดผลลัพธ์ให้กับตัวถูกดำเนินการทางซ้ายC += A เท่ากับ C = C + A
-=ตัวดำเนินการลบและมอบหมาย มันลบตัวถูกดำเนินการทางขวาออกจากตัวถูกดำเนินการทางซ้าย และกำหนดผลลัพธ์ให้กับตัวถูกดำเนินการทางซ้ายC -= A เทียบเท่ากับ C = C – A
*=ตัวดำเนินการคูณและมอบหมาย มันคูณตัวถูกดำเนินการทางขวาด้วยตัวถูกดำเนินการทางซ้าย และกำหนดผลลัพธ์ให้กับตัวถูกดำเนินการทางซ้ายC *= A เท่ากับ C = C * A
/=ตัวดำเนินการแบ่ง AND มันแบ่งตัวถูกดำเนินการทางซ้ายด้วยตัวถูกดำเนินการทางขวา และกำหนดผลลัพธ์ให้กับตัวถูกดำเนินการทางซ้ายC /= A เท่ากับ C = C / A
%=โมดูลัสและตัวดำเนินการกำหนด มันใช้โมดูลัสโดยใช้ตัวถูกดำเนินการสองตัวและกำหนดผลลัพธ์ให้กับตัวถูกดำเนินการทางซ้ายC %= A เท่ากับ C = C % A
<<=กะซ้ายและตัวดำเนินการมอบหมายC <<= 2 เหมือนกับ C = C << 2
>>=กะขวาและตัวดำเนินการมอบหมายC >>= 2 เหมือนกับ C = C >> 2
&=ตัวดำเนินการกำหนดระดับบิตและC &= 2 เหมือนกับ C = C & 2
^=Bitwise เอกสิทธิ์ OR และตัวดำเนินการมอบหมายC ^= 2 เหมือนกับ C = C ^ 2
|=Bitwise รวม OR และตัวดำเนินการมอบหมายC |= 2 เหมือนกับ C = C | 2


Misc Operators ↦ sizeof & ternary


นอกจากตัวดำเนินการที่กล่าวถึงข้างต้น ยังมีตัวดำเนินการที่สำคัญอื่น ๆ อีกสองสามตัวรวมถึง sizeof และ ? :รองรับโดยภาษาซี

โอเปอเรเตอร์คำอธิบายตัวอย่าง
sizeof()ส่งกลับขนาดของตัวแปรsizeof(a) โดยที่ a เป็นจำนวนเต็มจะส่งกลับ 4
&ส่งกลับที่อยู่ของตัวแปร&NS; ส่งคืนที่อยู่จริงของตัวแปร
*ตัวชี้ไปยังตัวแปร*NS;
? :นิพจน์เงื่อนไขถ้า Condition เป็นจริง ? แล้วค่า X : มิฉะนั้นค่า Y


ลำดับความสำคัญของตัวดำเนินการในC


ลำดับความสำคัญของตัวดำเนินการจะกำหนดการจัดกลุ่มของคำในนิพจน์และตัดสินใจว่าจะประเมินนิพจน์อย่างไร ตัวดำเนินการบางตัวมีลำดับความสำคัญสูงกว่าตัวดำเนินการอื่น ตัวอย่างเช่น ตัวดำเนินการคูณมีลำดับความสำคัญสูงกว่าตัวดำเนินการบวก

ตัวอย่างเช่น x = 7 + 3 * 2; ในที่นี้ x ถูกกำหนดเป็น 13 ไม่ใช่ 20 เนื่องจากตัวดำเนินการ * มีลำดับความสำคัญสูงกว่า + ดังนั้นก่อนอื่นจะถูกคูณด้วย 3*2 แล้วบวกเข้ากับ 7

ในที่นี้ ตัวดำเนินการที่มีลำดับความสำคัญสูงสุดจะปรากฏที่ด้านบนสุดของตาราง ตัวดำเนินการที่มีค่าต่ำสุดจะปรากฏที่ด้านล่าง ภายในนิพจน์ ตัวดำเนินการที่มีลำดับความสำคัญสูงกว่าจะได้รับการประเมินก่อน

CategoryOperatorAssociativity
Postfix() [] -> . ++ – –Left to right
Unary+ – ! ~ ++ – – (type)* & sizeofRight to left
Multiplicative* / %Left to right
Additive+ –Left to right
Shift<< >>Left to right
Relational< <= > >=Left to right
Equality== !=Left to right
Bitwise AND&Left to right
Bitwise XOR^Left to right
Bitwise OR|Left to right
Logical AND&&Left to right
Logical OR||Left to right
Conditional?:Right to left
Assignment= += -= *= /= %=>>= <<= &= ^= |=Right to left
Comma,Left to right

Leave a Reply

Your email address will not be published. Required fields are marked *