260 likes | 518 Vues
517 101 LAB - 5_2. เครื่องหมายและการดำเนินการในภาษาซี. ตัวดำเนินการ(operator). ตัวดำเนินการ (operator) คือเครื่องหมายที่ใช้เพื่อแสดงความหมายในการกระทำต่างๆ สามารถจัดกลุ่มได้ดังนี้. ตัวดำเนินการกำหนดค่า (assignment operator) ตัวดำเนินการเลขคณิต (arithmetic operators)
E N D
517 101 LAB - 5_2 เครื่องหมายและการดำเนินการในภาษาซี
ตัวดำเนินการ(operator) ตัวดำเนินการ (operator) คือเครื่องหมายที่ใช้เพื่อแสดงความหมายในการกระทำต่างๆ สามารถจัดกลุ่มได้ดังนี้ • ตัวดำเนินการกำหนดค่า (assignment operator) • ตัวดำเนินการเลขคณิต (arithmetic operators) • ตัวดำเนินการระดับบิต (bitwise operator) • ตัวดำเนินการเปรียบเทียบ (relational operator) • ตัวดำเนินการเชิงตรรกะ (logical operator) • ตัวดำเนินการพิเศษ (special operator) 6.ตัวดำเนินการพิเศษ (special operator)
ข้อมูลที่ทำงานกับตัวดำเนินการ เรียกว่า ตัวถูกดำเนินการ (operand) ตัวดำเนินการบางตัวต้องมีตัวถูกดำเนินการ 2 ตัว ในขณะที่บางตัวจะใช้ตัวถูกดำเนินการเพียงตัวเดียว โดยตัวดำเนินการทั้งหมดจะใช้ตัวถูกดำเนินการในการสร้างนิพจน์
ตัวดำเนินการกำหนดค่า (assignment operator) • ตัวดำเนินการกำหนดค่าที่ใช้กันโดยทั่วไปคือ= โดยนิพจน์กำหนดค่าที่ใช้ตัวดำเนินการนี้เขียนได้ในรูปแบบดังนี้ • โดยที่ identifier โดยทั่วไปจะเป็นตัวแปร และ expression จะเป็นค่าคงที่ ตัวแปร หรือนิพจน์ที่มีความซับซ้อนก็ได้ • นิพจน์ทางขวามือ กำหนดค่า ให้กับตัวแปรทางซ้ายมือ เช่น x = 50; identifier = expression
ตัวอย่าง นิพจน์กำหนดค่าที่ใช้ตัวดำเนินการ = a = 3 x = y delta = 0.001 sum = a + b area = length * width ในหนึ่งประโยค สามารถใช้ตัวดำเนินการ = ได้หลายตัว เช่น int i, j, k,cost,fee; i = j = k = 100; cost = fee=4*5;
operator ความหมาย + การบวก - การลบ และ unary operator * การคูณ / การหารซึ่งจะเป็นการหาผลลัพธ์จากการหาร % ( modulo) การหาเศษ(remainder) ที่เป็นจำนวนเต็มจากการหาร (operand ต้องเป็นจำนวนเต็มทั้งคู่) ตัวดำเนินการเลขคณิต (arithmetic operators) เป็นตัวดำเนินการที่ทำให้เกิดการกระทำทางคณิตศาสตร์ประกอบด้วย
ตัวอย่าง แสดงขั้นตอนการทำงานของตัวดำเนินการ • 4 + 3 * 2 4 + 6 • 9 * 2 - 15/3 + 7 18 - 5 + 7 13 + 7 20
จงหาค่านิพจน์ต่อไปนี้จงหาค่านิพจน์ต่อไปนี้ -(-5+(2*4-1))+((6+2)*5+8)/4 -(-5+(8-1))+(8*5+8)/4 -(-5+7)+(40+8)/4 -(2)+48/4 -2+12 10
เท็จ เลข 0 เลขที่ไม่ใช่ 0 จริง ตัวดำเนินการเปรียบเทียบ(relational operator) • ใช้ในคำสั่งประเภทเงื่อนไข (condition statement) เช่น if • ใช้เปรียบเทียบตัวเลขเท่านั้น • การเปรียบเทียบ character string ต้องใช้ function เกี่ยวกับstring • ผลลัพธ์จากการเปรียบเทียบ อาจจะเป็นเท็จ (มีค่าเท่ากับ 0) หรือ จริง (มีค่าเท่ากับ 1 หรือมีค่าใดๆที่ไม่เท่ากับ 0) หมายเหตุภาษา C จะไม่มีข้อมูลชนิด boolean (true หรือ false) แต่ใช้ค่าตัวเลข 0 และตัวเลขอื่น
operator ความหมาย > มากกว่า >= มากกว่าหรือเท่ากับ < น้อยกว่า <= น้อยกว่าหรือเท่ากับ == เท่ากับ != ไม่เท่ากับ ตัวดำเนินการเปรียบเทียบในภาษา c ข้อควรระวัง operator == ใช้ในการเปรียบเทียบ ส่วน = ใช้กำหนดค่าให้ตัวแปร เราสามารถตรวจสอบค่าได้ดังนี้ printf(“value of true = %d “, 5==5); /* ใน turbo c จะแสดงค่า 1 */ printf(“value of false = %d”, 5!=5);
< <= > >= ตัวดำเนินการเหล่านี้มีลำดับความสำคัญเท่ากัน แต่มีลำดับความสำคัญต่ำกว่าตัวดำเนินการเลขคณิต โดยลำดับการทำงานในกลุ่มเดียวกันนั้นจะทำจากซ้ายไปขวา • == != ตัวดำเนินการเทียบเท่า(equality operator) สองตัวนี้มีลำดับความสำคัญเท่ากัน แต่ต่ำกว่าตัวดำเนินการเปรียบเทียบ< <= > >= เหล่านี้ และมีลำดับการทำงานในกลุ่มเดียวกันจากซ้ายไปขวา
ตัวอย่าง 1 • สมมติ i, j และk เป็นตัวแปรจำนวนเต็มที่มีค่า 1, 2 และ3 ตามลำดับ ตารางต่อไปนี้เป็นนิพจน์ที่สร้างจากตัวแปรเหล่านี้
ตัวดำเนินการเชิงตรรกะ (logical operator) • logical operator คือ ตัวดำเนินการที่ใช้ในการเปรียบเทียบและตัดสินใจ โดยเอาเงื่อนไขตั้งแต่ 2 เงื่อนไขมาเปรียบเทียบกัน ผลที่ได้จากการเปรียบเทียบจะได้ผลเป็น 2 กรณี คือ จริงซึ่งให้ค่าเป็น 1 และเท็จซึ่งให้ค่าเป็น 0 เช่นเดียวกับตัวดำเนินการเปรียบเทียบ(relational operator) โดยตัวดำเนินการเชิงตรรกะ (logical operator) มีดังนี้
operator การทำงาน && เอาสถานะทั้งสองมา and กัน || เอาสถานะทั้งสองมา or กัน ! operand operand ! not เปลี่ยนสถานะให้ตรงกันข้าม (เป็น unary operator) เท็จ จริง จริง เท็จ ตัวดำเนินการเชิงตรรกะ (logical operator)
OP1 OP2 OP1 && OP2 OP1 || OP2 เท็จ เท็จ เท็จ เท็จ เท็จ จริง เท็จ จริง จริง เท็จ เท็จ จริง จริง จริง จริง จริง ตารางค่าความจริงของ operator && และ || หมายเหตุค่าของ operand ถ้าเป็น 0 ถือว่า เท็จ ส่วนค่าอื่นๆที่ไม่ใช่ 0 ถือว่าจริง ตัวอย่าง printf(“value of (2>5) && (5>=5) = %d “, (2>5) && (5>=5)); printf(“value of (2>5) || (5>=5) = %d “, (2>5) || (5>=5));
ตัวดำเนินการพิเศษ (special operator) คือ ตัวดำเนินการที่อยู่นอกเหนือจากกลุ่มตัวดำเนินการ ต่างๆ ที่ได้กล่าวมา ซึ่งประกอบด้วย • ตัวดำเนินการเพิ่ม/ลด (increment/decrement operator) • ตัวดำเนินการพอยน์เตอร์ (pointer-related operators) • ตัวดำเนินการคอมม่า (comma operator) • ตัวดำเนินการกำหนดชนิด (cast operator) • ตัวดำเนินการหาขนาด (sizeof operator)
ตัวดำเนินการเพิ่ม/ลด (increment/decrement operator) • เป็นตัวดำเนินการสำหรับการเพิ่มค่าและการลดค่าในตัวแปรครั้งละหนึ่ง • ซึ่งสามารถนำไปใช้กับตัวแปรได้ 2 ลักษณะ คือ
1. วางไว้หลังตัวแปร เช่น i++ หรือ i-- • ซึ่งในกรณีนี้จะทำ operator ตัวอื่นก่อนแล้วจึงจะ เพิ่มหรือลดค่าในตัวแปร เช่น count = 2; i = count++; ดังนั้นจะนำค่าในตัวแปร count กำหนดให้กับ i ก่อน แล้วจึงเพิ่มค่าในตัวแปร count ขึ้นอีกหนึ่ง จะได้ i มีค่าเท่ากับ 2 count มีค่าเท่ากับ 3
2. วางไว้หน้าตัวแปร เช่น ++i หรือ --i • ซึ่งในกรณีนี้จะเพิ่มหรือลดค่าในตัวแปรก่อนแล้วจึงทำ operator ตัวอื่น เช่น count = 2; i = ++count; ดังนั้นจะเพิ่มค่าในตัวแปร count ขึ้นอีกหนึ่ง ก่อนจะกำหนดให้ กับตัวแปร i จะได้ i มีค่าเท่ากับ 3 count มีค่าเท่ากับ 3
ตัวดำเนินการคอมม่า (comma operators) • ใช้แบ่งแยกแต่ละส่วน ภายใน statement เดียวกัน • ตัวอย่างเช่น int i = 5, j =6 , k;
ตัวดำเนินการกำหนดชนิด (cast operator) • เราสามารถเปลี่ยนประเภทของข้อมูลที่ได้จากนิพจน์ไปเป็นประเภทของข้อมูลที่เราต้องการได้ โดยใส่ชื่อประเภทของข้อมูล ที่ต้องการเอาไว้ในวงเล็บก่อนที่จะเขียนนิพจน์นั้นโดยมีรูปแบบ คือ • โดยคำว่า type เป็นชื่อชนิดของตัวแปรที่ต้องการระบุให้แก่ expression หรือเทอมของคำสั่ง ซึ่ง expression อาจแทนโดยตัวแปรได้โดยตรง (type) expression;
float cost=3.5; int mycost = cost; /* mycost มีค่าเท่ากับ 3 */ ข้างต้น ภาษา c จะแปลงชนิดของข้อมูลให้โดยอัตโนมัติ แต่เราก็สามารถระบุให้มีการแปลงชนิดตามที่เราต้องการ โดยใช้ casting operator เช่น i = (int) 3.4 * 6; i = (int) (3.4*6);
Compound assignments • ในประโยคที่มีการกำหนดค่าใหม่ให้กับตัวแปร โดยใช้ค่าเดิมในตัวแปร ไปทำการคำนวณ เช่น • ในการทำงานลักษณะนี้ C ได้จัดเตรียม operator ในกลุ่มที่เรียกว่า ที่เรียกว่า compound assignments เพื่อให้ผู้ใช้สามารถเรียกใช้ได้ง่ายขึ้น operator ในกลุ่มของ compound assignment ประกอบด้วย int i = 5; i = i + 5; /* i เท่ากับ 10 */ คือ จะมีการนำค่าเดิมในตัวแปร i บวกด้วย 5 แล้วนำผลลัพธ์ที่ได้กำหนดให้ตัวแปร i อีกครั้ง
Operator ตัวอย่าง เทียบเท่ากับ += i += 5; i = i + 5; -= i -= 5; i = i - 5; *= i *= 5; i = i * 5; /= i /= 5; i = i / 5; %= i %= 5; i = i % 5; ตารางตัวอย่างการใช้ compound assignments
สรุป ลำดับความสำคัญของ operator ลำดับความสำคัญมาก ลำดับความสำคัญน้อย