Upload
mevenwen-singollo
View
199
Download
1
Embed Size (px)
Citation preview
เครองหมายและการดำาเนนการในภาษาซ
2
ตวดำาเนนการ(operator)ตวดำาเนนการ (operator) คอเครองหมายทใชเพอแสดงความหมายในการกระทำาตางๆ สามารถจดกลมไดดงน1. ตวดำาเนนการกำาหนดคา
(assignment operator) 2. ตวดำาเนนการเลขคณต
(arithmetic operators) 3. ตวดำาเนนการระดบบต
(bitwise operator) 4. ตวดำาเนนการเปรยบเทยบ
(relational operator) 5. ตวดำาเนนการเชงตรรกะ
(logical operator) 6. ตวดำาเนนการพเศษ (special operator)
6. ตวดำาเนนการพเศษ (special operator)
3
ขอมลททำางานกบตวดำาเนนการ เรยกวา ตวถกดำาเนนการ (operand) ตวดำาเนนการบางตวตองมตวถกดำาเนนการ 2 ตว ในขณะทบางตวจะใชตวถกดำาเนนการเพยงตวเดยว โดยตวดำาเนนการทงหมดจะใชตวถกดำาเนนการในการสรางนพจน
4
ตวดำาเนนการกำาหนดคา (assignment operator)
ตวดำาเนนการกำาหนดคาทใชกนโดยทวไปคอ = โดยนพจนกำาหนดคาทใชตวดำาเนนการนเขยนไดในรปแบบดงน
โดยท identifier โดยทวไปจะเปนตวแปร และ expression จะเปนคาคงท ตวแปร หรอนพจนทมความซบซอนกได
นพจนทางขวามอ กำาหนดคา ใหกบตวแปรทางซายมอ
เชน x = 50;
identifier = expression
5
ในหนงประโยค สามารถใชตวดำาเนนการ = ไดหลายตว
เชน int i, j, k,cost,fee; i = j = k = 100; cost = fee=4*5;
a = 3x = ydelta = 0.001sum = a + barea = length * width
ตวอยาง นพจนกำาหนดคาทใชตวดำาเนนการ =
6
ตวดำาเนนการเลขคณต (arithmetic operators)
เปนตวดำาเนนการททำาใหเกดการกระทำาทางคณตศาสตร ประกอบดวย
operator
ความหมาย+ การบวก
- การลบ และ unary operator* การคณ
/ การหาร ซงจะเปนการหาผลลพธจากการหาร%
( modulo)
การหาเศษ(remainder) ทเปนจำานวนเตม จากการหาร (operand ตองเปนจำานวนเตมทงค)
7
ตวอยาง แสดงขนตอนการทำางานของตวดำาเนนการ
4 + 3 * 2 4 + 6
9 * 2 - 15/3 + 7 18 - 5 + 7 13 + 7
20
8
จงหาคานพจนตอไปน
-(-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
9
ตวดำาเนนการเปรยบเทยบ(relational operator)
ใชในคำาสงประเภทเงอนไข (condition statement) เชน if
ใชเปรยบเทยบตวเลขเทานน การเปรยบเทยบ character string ตองใช
function เกยวกบstring ผลลพธจากการเปรยบเทยบ อาจจะเปนเทจ (มคา
เทากบ 0) หรอ จรง (มคาเทากบ 1 หรอมคาใดๆทไมเทากบ 0)
หมายเหต ภาษา C จะไมม ขอมลชนด boolean
(true หรอ false) แตใชคาตวเลข 0 และตวเลขอน
เทจ
จรงเลขทไมใช 0
เลข 0
10
operator
ความหมาย> มากกวา
>= มากกวาหรอเทากบ< นอยกวา
<= นอยกวาหรอเทากบ== เทากบ
!= ไมเทากบ
ตวดำาเนนการเปรยบเทยบ ในภาษา c
เราสามารถตรวจสอบคาไดดงนprintf(“value of true = %d “, 5==5); /* ใน turbo c จะแสดงคา 1 */printf(“value of false = %d”, 5!=5);
ขอควรระวงoperator == ใชใน
การเปรยบเทยบ สวน = ใชกำาหนดคาให
ตวแปร
11
< <= > >= ตวดำาเนนการเหลานม
ลำาดบความสำาคญเทากน แตมลำาดบความสำาคญตำากวาตวดำาเนนการเลขคณต โดยลำาดบการทำางานในกลมเดยวกนนนจะทำาจากซายไปขวา
== != ตวดำาเนนการเทยบเทา(equality operator) สองตวนมลำาดบความสำาคญเทากน แตตำากวาตวดำาเนนการเปรยบเทยบ< <= > >= เหลาน และมลำาดบการทำางานในกลมเดยวกนจากซายไปขวา
12
ตวอยาง 1 สมมต i, j และk เปนตวแปรจำานวนเตมทมคา 1,
2 และ3 ตามลำาดบ ตารางตอไปนเปนนพจนทสรางจาก
ตวแปรเหลานนพจน การแปลความหมาย คาi < j
(i + j) >= k(j + k) > (i + 5)
k != 3j == 2
จรงจรงเทจเทจจรง
11001
13
logical operator คอ ตวดำาเนนการทใชในการเปรยบเทยบและตดสนใจ โดยเอาเงอนไขตงแต 2 เงอนไขมาเปรยบเทยบกน ผลทไดจากการเปรยบเทยบจะไดผลเปน 2 กรณ คอ จรงซงใหคาเปน 1 และเทจซงใหคาเปน 0 เชนเดยวกบตวดำาเนนการเปรยบเทยบ(relational operator) โดยตวดำาเนนการเชงตรรกะ (logical operator) มดงน
ตวดำาเนนการเชงตรรกะ (logical operator)
14
ตวดำาเนนการเชงตรรกะ (logical operator)
operator
การทำางาน
&& เอาสถานะทงสองมาand กน
|| เอาสถานะทงสองมาor กน
! not เปลยนสถานะให ตรงกนขาม ( เปน
unary operator)
operand! operandเทจจรง เทจ
จรง
15
ตารางคาความจรงของ operator && และ || OP1
OP2 OP1 && OP2
OP1 || OP2เทจ เทจ เทจ เทจ
เทจ จรง เทจ จรงจรง เทจ เทจ จรงจรง จรง จรง จรง
หมายเหต คาของ 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));
16
ตวดำาเนนการพเศษ (special operator)
ตวดำาเนนการเพม/ลด (increment/decrement operator)
ตวดำาเนนการพอยนเตอร (pointer-related operators)
ตวดำาเนนการคอมมา (comma operator)
ตวดำาเนนการกำาหนดชนด (cast operator)
ตวดำาเนนการหาขนาด (sizeof operator)
คอ ตวดำาเนนการทอยนอกเหนอจากกลมตวดำาเนนการ
ตางๆ ทไดกลาวมา ซงประกอบดวย
17
ตวดำาเนนการเพม/ลด (increment/decrement operator)
เปนตวดำาเนนการสำาหรบการเพมคาและการลดคาในตวแปรครงละหนง
operator ชอ การทำางาน++--
incrementdecrement
เพมคาขนหนงลดคาลงหนง
ซงสามารถนำาไปใชกบตวแปรได 2 ลกษณะคอ
18
ซงในกรณนจะทำา operator ตวอนกอน แลวจงจะ เพมหรอลดคาในตวแปร
1. วางไวหลงตวแปร เชน i++ หรอ i--
เชน count = 2; i = count++;
ดงนนจะนำาคาในตวแปร count กำาหนดให กบ i กอน
แลวจงเพมคาในตวแปร count ขนอกหนง จะได i มคาเทากบ 2 count มคาเทากบ 3
19
2. วางไวหนาตวแปร เชน ++i หรอ --i
เชน count = 2; i = ++count;
ดงนนจะเพมคาในตวแปร count ขนอกหนง กอนจะกำาหนดให
กบตวแปร i จะได i มคาเทากบ 3
count มคาเทากบ 3
ซงในกรณนจะเพมหรอลดคาในตวแปรกอน แลวจงทำา operator ตวอน
20
ใชแบงแยกแตละสวน ภายใน statement เดยวกน
ตวอยางเชน int i = 5, j =6 , k;
ตวดำาเนนการคอมมา (comma operators)
21
เราสามารถเปลยนประเภทของขอมลทไดจากนพจนไปเปนประเภทของขอมลทเราตองการได โดยใสชอประเภทของขอมลทตองการเอาไวในวงเลบกอนทจะเขยนนพจนนน โดยมรปแบบ คอ
โดยคำาวา type เปนชอชนดของตวแปรทตองการระบใหแก expression หรอเทอมของคำาสง ซง expression อาจแทนโดยตวแปรไดโดยตรง
ตวดำาเนนการกำาหนดชนด (cast operator)
(type) expression;
22
float cost=3.5; int mycost = cost; /*
mycost มคาเทากบ 3 */ขางตน ภาษา c จะแปลงชนดของขอมล
ใหโดยอตโนมต แตเรากสามารถระบใหมการแปลงชนดตามทเรา
ตองการ โดยใชcasting operator เชน i = (int) 3.4 * 6;
i = (int) (3.4*6);
23
Compound assignments
ในประโยคทมการกำาหนดคาใหมใหกบตวแปร โดยใชคาเดมในตวแปร
ไปทำาการคำานวณ เชน
ในการทำางานลกษณะน C ไดจดเตรยม operator ในกลมทเรยกวา ทเรยกวา compound assignments เพอใหผใชสามารถเรยกใชไดงายขน operator ในกลมของ compound assignment ประกอบดวย
int i = 5;i = i + 5; /* i เทากบ 10 */
คอ จะมการนำาคาเดมในตวแปร i บวกดวย 5 แลวนำาผลลพธทไดกำาหนดใหตวแปร i อกครง
24
ตารางตวอยางการใช compound assignments
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;
25
สรป ลำาดบความสำาคญของ operator
ลำาดบความสำาคญนอย
ลำาดบความสำาคญมากกลมของตวดำาเนนการ ตวดำาเนนการ
ตวดำาเนนการยนาร คณหารและหาเศษเหลอ
บวกและลบตวดำาเนนการเปรยบเทยบตวดำาเนนการเทยบเทาANDORตวดำาเนนการเงอนไขตวดำาเนนการกำาหนดคา
- ++ -- ! sizeof (type)* / %
+ -< <= > >=
== !=&&||? :
= += -= *= /= %=