1
หัวข้อ
➢คำสังกำรกำหนดค่ำ
➢นิพจนท์ ำงคณิตฯ (Arithmetic Expression)
➢นิพจนท์ มี ีข้อมูลต่ำงชนิด
➢นิพจนท์ ำงตรรกะ (Logical Expression)
2
รคใูชปำส้แสำบังหบกรำบั หกนำหดนคด่ำvaค(rAำ่ iaขsbอsliงegนn=ิพmจeeนxnpใ์trหSeก้ staับstiตeomวัnแ;eปnรt)
เช่น result = 5 * 2 + 100;
เป็นกำรนำผลลพั ธ์ของนิพจน์ (ขวำของ =) มำเก็บในต=ัวแ1ป1ร0(ซำ้ ยของ =)
3
นน21..พิิพนนจจพิพิ นนจจท์ ์นนมำทท์์งี ค2ำำณงงชตคิตนรณฯรดิ กิตแะฯบ่ง((เLAปor็นigt3hicmชaนelิดtEตicxำpมEตrxeวัpsดrsำeเioนssินniกsoำ)nรs)
1.สกำหำรรบัดกำำเรนคินำนกวำณรทBำiงnคaณryิตศำสตร์ (+, -, *, /, %)
2. กำรดำเนนิ กำร Unary
สำหรบั กำหนดค่ำเป็น +/- และกำรเพิม/ลดค่ำ (++, --)
3. กำรดำเนินกำร Compound Assignment
สำหรบั กำรคำนวณทำงคณิตฯ และกำหนดคำ่ (+=, -=, *=, /=, %=)
4
ตวั ดำเนนิ กำร Binary (+, -, *, /, %) ใชใ้ นกำรหำ
ผลลพั ธ์กำรคำนวณระหวำ่ งขอ้ มลู 2 คำ่
คำนวณ ตัวอย่ำง
บหคลวำูณบกร Operator 19
result = a + b; 9
modulus + 70
- result = a – b; 2
* result = a * b; 4
/
% result = a / b;
result = a%b;
หมำยเหตุ modulus (%) เป็นกำรเก็บเศษทีไดจ้ ำกกำรหำร a ดว้ ย b
เชน่ ถ้ำให้ a = 14, b = 5 คำนวณ result
5
ลำดบั กำรดำเนนิ กำร
ในนพิ จนท์ มี ี ตัวดำเนนิ กำรหลำยตวั
1. ( )
2. *, /, %
3. +, -
ถำ้ ในนิพจนม์ ตี ัวดำเนินกำรทีมีลำดับเทำ่ กนั จะ
ประมวลผลจำกซ้ำยไปขวำ (ตำมทีปรำกฏในนิพจน)์
เช่น result = 100 - 5 * 2 + 5;
21 3
6
แสดงลำดบั กำรดำเนนิ กำรของนิพจน์
5*(4-6/2)+10
start
3 21 4 x = 5*(4-6/2)+10
Print x
t1 5*(4- 3) +10 end
t2
t3 5* 1 +10
5 +10
t4
15#include <stdio.h> #include <stdio.h>
void main()
void main() {
{ int t1, t2, t3, t4; int t = 5*(4-6/2)+10;
t1 = 6/2; printf(1. 6/2=%d\n”, t1); printf(“%d\n”, t);
t2 = 4-t1; printf(2. (4-6/2)=%d\n”, t2); }
t3 = 5*t2; printf(3. 5*(4-6/2)=%d\n”, t3);
t4 = t3+10; printf(4. 5*(4-6/2)+10=%d\n”, t4); 7
}
แสดงลำดับกำรดำเนินกำรของนิพจน์
8.5-10.0/4*(5+4)
4 2 31
8.5-10.0/4* 9
8.5- 2.5* 9
8.5- 22.5
#include <stdio.h> -14.0 start
x = 8.5-10./4*(5+4)
void main()
Print x
{ end
float t = 8.5-10.0/4*(5+4); 8
printf(“%f\n”, t);
}
แสดงลำดับกำรดำเนินกำรของนพิ จน์
Y = 2*5*4+3*5+9
Y = 10 *4+3*5+9
Y = 40 +3*5+9
Y = 40 +15 +9
Y = 55 +9
Y#include <stdio.h> = 64 start
y = 2*5*4+3*5+9
void main()
Print y
{ end
int y = 2*5*4+3*5+9;
printf(“y = %d\n”, y);
}
9
ตัวดำเนินกำร Unary ใชใ้ นกำรดำเนินกำร กบั ขอ้
มลู ค่ำเดียว
◦กำรกำหนดค่ำบวก(+)หรือลบ(-)ใหต้ ัวแปร เชน่ -x,..
◦กำรเพมิ ขนึ (++) หรือลดลง (--) ของตวั แปรทลี ะหนึง
เชน่ ++x (หรือ x = x+1), --y (หรอื y = y-1), ...
ตวั อย่ำงเช่น ให้ a = 10, b = 10,
และ ++a, --b
จะได้ a = 11, b = 9
10
ลำดบั กำรดำเนินกำร
1. ( )
2. ++, -- Unary
3. *, /, %
ปถำ้ระใ4นม.นว+ลิพ,ผจ-ลนจม์ ำีตกวั ซด้ำำยเนไนิปกขำวรำทีมีลำดบั เทำ่ กัน จะ
ตัวอยำ่ งเชน่
n=5; N = ++n + 10;
จะทำ ++n ก่อน แลว้ จึงบวก 10 ดังนนั N = 6+10=16 และ n = 6
11
Prefix Unary ร่วมกับ Binary ในนิพจน์ เชน่
noPp=ose5จtrะ;faทixNำti+Uo+=nnnกa+อ่ นr+yแลnรว้ จ่ว+งึ บมวกก110บั 0;ดBงั นiนั nNa/=r/y6+pใ1r0นe=1นf6ixิพและจunนn=a์ 6เrชy่น
nตop=ัวeอ5จrะย;aท่ำNำtinงo+=เnช10น่nก+่อน+เพิม+คำ่ 10; // postfix unary
n++ ดังนนั N = 5+10=15 และ n=6
i=10; j=2; N = i * ++j;
// prefix จะทำ ++j=3 กอ่ น N = 10*3=30
i=10; j=2; N = i * j++; // postfix จะทำ N = i * j=20 ก่อน j++=3
i=10; j=2; N = i * --j; // prefix จะทำ --j=1 กอ่ น N = 10*1=10
i=10; j=2; N = i * j--; // postfix จะทำ N = i * j=20 กอ่ น j--=1
12
แPสreดfiงxล(ำ+ด+ับj,ข-อ-jง)กเำปรรคยี ำบนเทวณยี บนกพิ ับจนPต์os่อtไfปixน(ีjแ+บ+,บjก--ร)ณี
#include <stdio.h> i=10; j=2; N = i * ++j; = 30
void main() i=10; j=2; N = i * j++; = 20
{ int i, j, N; i=10; j=2; N = i * --j; = 10
i=10; j=2; N = i * j--; = 20
i=10; j=2; N=i*++j;
printf(“N=i*++j = %d, i=%d, j=%d\n", N, i, j);
i=10; j=2; N=i*j++;
printf(“N=i*j-- = %d, i=%d, j=%d\n", N, i, j);
i=10; j=2; N=i*--j;
printf(“N=i*++j = %d, i=%d, j=%d\n", N, i, j);
i=10; j=2; N=i*j--; 13
printf(“N=i*j-- = %d, i=%d, j=%d\n", N, i, j);
}
กเผคลำรลอืรัพงดหธำม์แเบำนยบิน=Bกi(nทำaำrรyให(Cท+้ o,ำ-ง,m*ำ,น/p,%ใoน)uAรn่วLdมUกAไับดsกเ้sรำiว็รgขกnึนำmห)ตนeัวดnอคtำ่ยเดปำ่ ว้็งนยก4ำ.5ร:หxำ=20,y=2
Operator ตวั อยำ่ ง = กำรทำงำน
+= x += 5 x = x + 5; 25
-= x -= 5 x = x - 5; 15
*= x *= 5 x = x * 5; 100
x *= y x = x * y; 40
x *= y+8 x = x * (y+8); 200
/= x /= 5 x = x / 5; 4
x /= y x = x / y; 10
%= x %= 5 x = x % 5; 0
14
ลำดบั กำรดำเนนิ กำร
1. ( )
2. ++, -- Unary
3. *, /, %
4. +, -
ถ้ำม5ีล. ำ+ด=บั, เ-=ท,่ำ*ก=ัน, /จ=ะ, ป%ร=ะมวCลoผmลpจoำuกnซdำ้ ยAไsปsiขgวnmำ ent
ตวั อย่ำงเช่น x=20; y=2; x *= y+8;
10 =200
21 15
แสดงผลของตัวดำเนินกำร Compound Assignment ตอ่ ไปนีเมือ
i=10; j=2; k=100; k += i+j; = 100+(10+2) = 112
k -= i+j; = 100-(10+2) = 88
k *= i+j; = 100*(10+2) = 1200
#include <stdio.h> k /= i+j; = 100/(10+2) = 8
void main()
{
int i = 10, j = 2, k = 100;
k = 100; k+=i+j; printf(“k+=%d+%d = %d\n", i, j, k);
k = 100; k-=i+j; printf(“k-=%d+%d = %d\n", i, j, k);
k = 100; k*=i+j; printf(“k*=%d+%d = %d\n", i, j, k);
k = 100; k/=i+j; printf(“k/=%d+%d = %d\n", i, j, k);
}
16
นพิ จน์ (Expression) อำจมขี อ้ มูลตำ่ งชนิด (เช่น int, float, ...)
ผสมกัน => ผลลัพธ์ควรเป็นชนดิ ใด?
◦ ตำมหลักกำร จะใหผ้ ลลพั ธ์เป็นค่ำทมี ีควำมแมน่ ยำสูงกวำ่
int (+, -, *, /) float => float
float (+, -, *, /) int => float
ควรระวังกำรหำร int / int => int
กำรแปลงข้อมูลใหเ้ หมำะสมในนิพจน์ ทำได้ 2 แบบ
1. Type Conversion (กำรแปลงขอ้ มลู เป็นค่ำตำ่ งชนดิ )
2. Type Cast (กำรแปลงค่ำของตัวแปรเป็นค่ำตำ่ งชนิด)
17
หลกั กำรของ Type Conversion
กรณีขอ้ มูลผสม จะใหผ้ ลลัพธเ์ ป็นค่ำทีมีควำมแม่นยำสูงกว่ำ
int (+, -, *, /) float => float
float (+, -, *, /) int => float
ตวั อยำ่ งเชน่ คำนวณค่ำ p = 22/7 = ?
float PI; = 3.000000
PI = 22 / 7;
PI = 22.0 / 7;
= 3.142857
18
เขียนโปรแกรมเพือคำนวณพืนทีสำมเหลียม
Area = ½ ฐำน x สูง ผลลพั ธ์
Enter base (B):_4
#include <stdio.h>
void main() Enter height (H):_5
{ int B, H; Area = 10.000000
float Area; start
printf(“Enter base (B): ”); scanf(“%d”, &B);
printf(“Enter height (H): ”); scanf(“%d”, &H);
Input B, H
Area = 1.0/2 * B * H; Area = 1/2xBxH
printf(“Triangle area = %f \n”, Area); Print Area
} end
19 19
ถำ้ Area = 1/2 * B * H; // Area = 0.000000 ?
ถำ้ Area = 0.5 * B * H; // Area = 10.000000 ?
เขียนโปรแกรมเพือคำนวณพืนทีวงกลม
Area = pr2 เมอื คำนวณคำ่ p = 22/7
start
#include <stdio.h> Input r
void main() PI=22/7
{ int r; Area = PI*r*r
float Area, Pi; Print Area
printf(“Enter radius (r): ”); end
scanf(“%d”, &r);
Pi = 22.0/7; ผลลพั ธ์
Enter radius (r):_2
Area = Pi * r * r; Area = 12.571428
printf(“Circular area = %f \n”, Area);
} ถำ้ Pi = 22/7; // Pi = 3.0, Area = 12.000000 ?
20 20
ใชใ้ นกรณีทีตอ้ งกำรแปลงคำ่ ของตวั แปร
ใหเ้ หมำะสมในนิพจน์
รูปแบบ (type)expression;
ตัวอยำ่ งเช่น
int n=5, m=2; =5/2 = 2.0
float x, y;
x = n/m;
y = (float)n/m;
= 5.0 / 2 = 2.5
21
ลำดบั กำรดำเนนิ กำร
1. ( )
2. ++, --, Cast Unary, Type Cast
3. *, /, %
4. +, -
ถ้ำม5ีล. ำ+ด=ับ, เ-=ท,ำ่ *ก=ัน, /จ=ะ, ป%ร=ะมวCลoผmลpจoำuกnซd้ำยไปขวำ
ตัวอยำ่ งเช่น n=5; m=2; y = (float)n/m;
5.0 = 2.5
12 22
เรขำยียนไดโปเ้ งรินแฝกำรกมค(Inำcoนmวe)ณ=เเงงินนิ ตฝน้ ำก(Mพ) ร(1อ้ +มอดัตอรกำเดบอียกเเมบอื ียเว(Rล))ำปีผ=่ำนMไxป(11+ปRี )เYมอื
start
#include <stdio.h> Input M, R
void main()
{ int iR; // %interest rate (i.e., 5%) Income=M*(1+R)
float M, R, Income;
printf(“Enter Invested Money (M): ”); Print Income
scanf(“%f”, &M);
printf(“Enter %Interest Rate (R): ”);
scanf(“%d”, &iR);
R = (float)iR/100; // Type cast ผลลพั ธ์ end
Income = M * (1+R);
Enter Invested Money (M): 1_0000
printf(“Income after 1 year : %.2f\n”, Income);Enter %Interest Rate (R): 5_
} Income after 1 year : 10500.00
ถำ้ R = iR/100; // R = 0.0, Income = 10000.00 23
โปรแกรมภำษำ C มีกำรดำเนนิ กำรระดบั Bit
(Bitwise Operations) ทมี คี ่ำ 1(True)/0(False)
เพอื ประมวลผลเกียวกับนพิ จนต์ รรกะ (Logical Expression)
(AND)
(OR)
^ (XOR)
(NOT)
24
(&), (|), (~)
AND OR NOT (Inverter)
A F=A B A F=A+B A F= A
B B
AB F AB F AF
00 0 00 0 0 when both A 01
01 0 01 1 and B are 0 10
10 0 10 1
11 1 11
1
1 when both
A and B are 1
NAND (~,&), NOR (~,|), XOR (^), XNOR (~, ^)
25
ตวั แปรชนิด char (8 bits)
ตวั แปรชนิด int (16 bits)
ตัวแปรชนิด long (32 bits)
ตัวแปรทุกชนิดสำมำรถแสดงได้ 3 เลขฐาน
◦ เลขฐำน 10 (0,1,2,3,4,5,6,7,8,9) %d
◦ เลขฐำน 8 (0,1,2,3,4,5,6,7) %o
◦ เลขฐำน 16 (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F) %X
ตัวอยำ่ งเช่น
unsigned char A; // 8 bits
unsigned int B; // 16 bits
unsigned long C; // 32 bits
26
(&) operation AB F
0000 1110 & ( 0E) base 16
0100 1100 ( 4C) base 16 00 0
01 0
0000 1100 (=0C) base 16 10 0
11 1
OR ( | ) operation AB F
0000 1010 | ( 0A) base 16 00 0
01 1
0100 1100 ( 4C) base 16 10 1
11 1
01 001110 (=4E) base 16
XOR ( ^ ) operation
AB F
0000 1110 ^ ( 0E) base 16 27
0100 1100 00 0
0100 0010 ( 4C) base 16 01 1
(= 42) base 16 10 1
11 0
กำหนดคำ่ ตวั แปรเป็นเลขฐำน 16
variable = 0Xvalue;
ตัวอย่ำงเชน่
unsigned char A, B; // 8 bits
A = 0X0E // 0E = 0000 1110
B = 0X4C // 4C = 0100 1100
➢ NOT (~) operation
0000 1110 ~ ( 0E) base 16
1111 0001 (= F1) base 16
28
แสดงกำรหำค่ำ AND, OR, XOR, NAND, NOR, XNOR
ของ A, B เมอื A = 0000 10102 = 0E (base 16)
#include <stdio.h> B = 0100 11002 = 4C (base 16)
void main()
{ unsigned char A, B, AND, OR, XOR, NAND, NOR, XNOR;
A = 0X0E; B = 0X4C;
AND = A&B; printf("A&B = %.2X \n", AND); A&B = 0C
NNXOOOARRNRD====AA^|~~BBOA;;RNpp;Drrii;nnppttrffri((in""nAAttf^f|((B“B“~~==((AA%|%&B..2)B2X)=X=\\%nn%."2".,,2XOXX\ROn\)R;n",)";,NNOARN);DAA~);^|(BAB&==B4)4E=2 F3
XNOR = ~XOR; printf(“~(A^B) = %.2X \n", XNOR)~; (A|B) = B1
} ~(A^B) = BD
29
แสดงกำรหำคำ่ AND, OR, XOR (ขนำด 32 bits)
A = 0000 0000 0000 0000 0000 0000 0000 11102 =
0000000E16
B = 0000 0000 0000 0000 0000 0000 0100 11002 =
0000004C16
#include <stdio.h>
void main()
{
unsigned long A, B, AND, OR, XOR;
A= 0X0E; B = 0X4C;
AND = A&B; printf("A & B = %.8X\n", AND)A; & B = 0000000C
OR = A | B; printf("A | B = %.8X\n", OR);A | B = 0000004E
XOR = A^B; printf("A ^ B = %.8X\n", XOR)A; ^ B = 00000042
}
30
กำร Clear คำ่ ของ V บำง Bits ใหเ้ ป็น 0 (อยำ่ งเร็ว)
V & 0Xclr_value;
ถต้ำัวตออ้ยง่ำกงำเรชน่CleaVr =4 b0i1ts0(0H1ig1h0)0ของ V ใหเ้ ป็น 0
0100 1100 & ( 4C) base 16
0000 1111 ( 0F) base 16
0000 1100 ( bi0tsC()Lboaws)e
ให้ ข1อ6 ง V เป็น 0
ถ้ำตอ้ งกำร Clear 4
0100 1100 & ( 4C) base 16
1111 0000 ( F0) base 16
0100 0000 ( 40) base 16
31
แสดงกำร Clear ค่ำบำง Bits ของ V ใหเ้ ป็ น 0
6VกรCณ=0ี 134201.1...41กกกก00ำำำำ1ร7รรร1CA0CCC0l1ellleee06a0aaar0rrr044880b0bbbi0tiiisttt1sss0((((H1HLL0ioogi0gwwh0h)))0)0ขขขข0ออออ0งงงง11VVVV1ใใใ1ใหหห0หเ้1้เ้เเ้ปปป0ป็2็็ นนน็ น=0000
#include <stdio.h>
void main()
{
unsigned long V, A, B, C, D;
V = 0X6C01407A;
A = V & 0X0FFFFFFF; printf("A = %.8X (clear 4 hbits)\n", A);
B = V & 0X00FFFFFF; printf("A = %.8X (clear 8 hbits)\n", B);
C = V & 0XFFFFFFF0; printf("A = %.8X (clear 4 lbits)\n", C);
D = V & 0XFFFFFF00; printf("A = %.8X (clear 4 lbits)\n", D);
} 32
➢กำรหำคำ่ 1’s Complement ของ V คือ ~V
➢กำรหำคำ่ 2’s Complement ของ V คอื -V
➢ตวั อยำ่ งเชน่ V = 01001100
V = 0100 1100 ( 4C) base 16
~V = 1011 0011 ( B3) base 16
( 4C) base 16
V = 0100 1100 ( B4) base 16
-V = 1011 0100
33
แสดงกำรหำค่ำ 1’s Complement และ 2’s Complement ของ
V
V = 0000 0000 0000 0001 0100 0000 0111 1010 =
#in0c0lu0d1e4<07stAdi1o6.h>
void main()
{ long V, C1, C2; // 32 bits
V = 0X0001407A;
C1 = ~V; C2 = -V;
printf(“ V = %.8X(b16) = %d(b10)\n", V, V);
printf(“1’s C = %.8X(b16) = %d(b10)\n", C1, C1);
printf(“2’s C = %.8X(b16) = %d(b10)\n", C2, C2);
printf(“~V+1 = %.8X(b16) = %d(b10)\n", C1+1, C1+1);
}ผลลพั ธ์
V = 0001407A(b16)=82042(b10)
1’s C = FFFEBF85(b16)=-82043(b10)
2’s C = FFFEBF86(b16)=-82042(b10)
~V+1 = FFFEBF86(b16)=-82042(b10) 34
กำรดำเนนิ กำร มี 2 คำสัง
1. (<<): V<<k 11000011
2. Right Shift (>>): V>>k 110000110 0
0 011000011
➢ตัวอยำ่ งเช่น A = 1100 0011 1 1 0 0 0 0 1 1
A << 4 11000011 0000
A >> 4 000011000011
35
แสดงกำรเลือนบติ (Left/Right Shift) ของ V
6VกรCณ=0ี 124301.1...41LLRRe00eiif1gg7ft1thhAS0Stth01hSS0i6ifhh0ft0tiiffค0ttคำ่ 0่ำขคค0ขอำำ่่0อขขง1งออV0Vงง1จVVจ0ำำน0จจนวำำ0วนนน0นวว04นน80b480bi1tibbst1sii1ttss10102 =
#include <stdio.h>
void main()
{
long V, LS4, LS8, RS4, RS8;
V = 0X6C01407A; printf(“V = %.8X\n”, V); V = 6C01407A
LS4 = V<<4; printf(“LS4 = %.8X\n", LS4); LS4 = C01407A0
LS8 = V<<8; printf(“LS8 = %.8X\n", LS8); LS8 = 01407A00
RS4 = V>>4; printf(“RS4 = %.8X\n", RS4); RS4 = 06C01407
RS8 = V>>8; printf(“RS8 = %.8X\n", RS8); RS8 = 006C0140
} 36
กำรคณู หำรดว้ ย 2n แบบ Bit Shift
1. กำรคณู V << n
= V x 2n
2. กำรหำร V >> n = V / 2n
➢ตัวอยำ่ งเชน่ V = 15010 = 9616 = 0000 0000 1001 0110
V << 2 (= 150x22 = 600) 00 0000 1001 0110 00
V >> 1 (= 150/21 = 75) 0 0000 0000 1001 011
37
(x 2n) หรอื (/ 2n)
#include <stdio.h> 38
void main()
{
int V = 150; // base 10
printf(“V = %d \n", V);
printf(“%d x 4 = %d\n", V<<2);
printf(“%d / 2 = %d\n", V>>1);
}
ผลลพั ธ์
V = 150
150 x 4 = 600
150 / 2 = 75