Operators & Expression ธนวัฒน์ แซ่ เอียบ
Arithmetic Operators OperationOperatorExample Value of Sum before Value of sum after Multiply *sum = sum * 2; 4 Divide /sum = sum / 2; 4 Addition +sum = sum + 2; 4 Subtraction -sum = sum -2; 4 Increment ++++sum; 4 Decrement ----sum; 4 Modulus %sum = sum % 3; 4
Precedence Binary operators –+, - มี precedence เท่ากัน –*, / และ % มี precedence เท่ากัน –(+, -) มี precedence ต่ำกว่า (*, /, %) มี precedence ต่ำกว่า (--, ++) Arithmetic operators associate left to right
Example: Precedence -x+y*-z/w*2-x+y/5 ? จงใส่วงเล็บบอกลำดับการคำนวณของ -x+y*- z/w*2-x+y/5
Example: Modulus % เป็น operator สำหรับหาเศษของการหาร จาก x % y ถ้า y หาร x ลงตัว จะได้คำตอบ เท่ากับ ?
Relation Operators (>, >=, <, <=) มี precedence เท่ากัน และมี precedence ต่ำกว่า (==, !=) Relation Operators มี precedence ต่ำกว่า Arithmetic Operators Ex. i < Iim – 1 จะมีลำดับการทำงานอย่างไร ? OperatorMeaning == equal to != not equal < less than <= less than or equal to > greater than >= greater than or equal to
Example: Relation Operator ถ้ารับค่า X เท่ากับ 5 Y เท่ากับ 7 จะได้ผลลัพธ์ ปรากฏออกทางจอภาพอย่างไร
Logical Operators จงเขียนโปรแกรมแสดงผลลัพธ์ตามตารางข้างบน ( ใช้ printf ในการแสดงผลแบบง่ายๆ ) OperatorMeaning && and || or ! not Operand 1Operand 2 op1 || op2op1 && op2! op1 00 0non-zero 0
Type Conversions Implicit type conversion – เรียกว่า coercion – ถ้า compiler ตรวจพบว่า type ของ operands ไม่ถูกต้องแล้ว compiler จะทำ การแก้ไข type ให้ถูกต้อง –type ที่เล็กกว่า type ที่ใหญ่กว่า Explicit type conversion – ระบุตามความต้องการของโปรแกรมเมอร์ –Type casting
Implicit Type Conversion กฎสำหรับ binary operators – ถ้ามี operand ตัวใดตัวหนึ่งเป็น long double แล้ว operand ตัวอื่นถูกเปลี่ยนให้ กลายเป็น long double – มิฉะนั้น ถ้า operand ตัวใดตัวหนึ่งเป็น double แล้ว operand ตัวอื่นถูกเปลี่ยนให้ กลายเป็น double – มิฉะนั้น ถ้า operand ตัวใดตัวหนึ่งเป็น float แล้ว operand ตัวอื่นถูกเปลี่ยนให้กลายเป็น float – มิฉะนั้น จะเปลี่ยนจาก char และ short เป็น int – ถ้าไม่เช่นนั้น ถ้า operand ตัวใดตัวหนึ่งเป็น long แล้ว operand ตัวอื่นถูกเปลี่ยนให้ กลายเป็น long
Example: Coercion
Type Casting (type name) expression
Increment and Decrement Operators ++ (Increment Operator) เพิ่มค่า operand 1 ค่า –Prefix: ++n –Postfix: n++ -- (Decrement Operator) ลดค่า operand 1 ค่า –Prefix: --n –Postfix: n-- Prefix จะกระทำกับตัวแปรแล้วจึงนำค่ามาใช้ Posfix จะนำค่ามาใช้ก่อนการกระทำกับตัวแปร
Increment and Decrement Operators ถ้า n เท่ากับ 6 ให้พิจารณาค่า x ต่อไปนี้ x = n++ / x = --n Operators ทั้งคู่สามารถใช้งานได้กับตัวแปร เท่านั้น (i +1)++ ถูกต้องหรือไม่ ? จงแสดงผลลัพธ์ที่ปรากฏออกทางจอภาพ
Assignment Operators and Expressions Expression เช่น i = i + 2 ( ตัวแปร i ปรากฏทั้ง ด้านซ้ายและขวา ) รูปแบบที่มีขนาดเล็กลงคือ i += 2 Operator += เรียกว่า Assignment Operators Binary operators เกือบทั้งหมดสามารถเขียน ในรูปแบบคือ “op=“ เมื่อ op คือ 1 ใน + - * / % > & ^ | expr 1 op= expr 2 เทียบเท่ากับ expr 1 = expr 1 op expr 2 x *= y + 1 มีลำดับการทำงานจริงๆเป็นอย่างไร ?
Assignment Operators OperatorOperation Performed = Simple assignment *= Multiplication assignment /= Division assignment %= Remainder assignment += Addition assignment –= Subtraction assignment <<= Left-shift assignment >>= Right-shift assignment &= Bitwise-AND assignment ^= Bitwise-exclusive-OR assignment |= Bitwise-inclusive-OR assignment
Conditional Expressions if (a > b) z = a; else z = b; ความหมายของ statement นี้คือ ? Condition statement สามารถเขียนให้อยู่ใน รูป ”?:” คือ expr 1 ? expr 2 : expr 3 อันดับแรก expr 1 จะถูกหาค่าว่าเป็นจริงหรือ เท็จ – ถ้าเป็นจริง ค่า expr 2 จะเป็นคำตอบ – ถ้าเป้นเท็จ ค่า expr 3 จะเป็นคำตอบ
Conditional Expressions if (a > b) z = a; else z = b; จะเปลี่ยนไปใช้ ternary operator “?:” ได้อย่างไร Ex. ต้องการแสดงข้อความออกทางจอภาพ ถ้า s มีค่าเท่ากับ 0 คือ ”She” ถ้า s มีค่า เท่ากับ 1 คือ ”He” int s; /* 0:female, 1: male */ s = 1; printf(“%s is good student”, … ); // จงเติม ส่วนที่หายไปของ printf
Precedence and Order of Evaluation OperatorsAssociativity () [] ->. left to right ! ~ * (type) sizeof right to left * / % left to right + - left to right > left to right >= left to right == != left to right & ^ | && left to right || left to right ?: right to left = += -= *= /= %= &= ^= |= >= right to left, left to right
ที่มา The C Programming Language : Brian W. Kernighan, Dennis M. Ritchie