You are on page 1of 11

Chng 2.

Biu thc

Chng ny gii thiu cc ton t xy dng sn cho vic son tho cc biu
thc. Mt biu thc l bt k s tnh ton no m cho ra mt gi tr.
Khi tho lun v cc biu thc, chng ta thng s dng thut ng c
lng. V d, chng ta ni rng mt biu thc c lng mt gi tr no .
Thng th gi tr sau cng ch l l do cho vic c lng biu thc. Tuy
nhin, trong mt vi trng hp, biu thc cng c th cho cc kt qu ph.
Cc kt qu ny l s thay i lu di trong trng thi ca chng trnh.
Trong trng hp ny, cc biu thc C++ th khc vi cc biu thc ton hc.
C++ cung cp cc ton t cho vic son tho cc biu thc ton hc,
quan h, lun l, trn bit, v iu kin. N cng cung cp cc ton t cho ra
cc kt qu ph hu dng nh l gn, tng, v gim. Chng ta s xem xt ln
lt tng loi ton t. Chng ta cng s tho lun v cc lut u tin m nh
hng n th t c lng ca cc ton t trong mt biu thc c nhiu
ton t.

2.1. Ton t ton hc


C++ cung cp 5 ton t ton hc c bn. Chng c tng kt trong Bng
2.1.
Bng 2.1

Cc ton t ton hc.


Ton t

+
*
/
%

Tn
Cng
Tr
Nhn
Chia
Ly phn d

V d

12 + 4.9
3.98 - 4
2 * 3.4
9 / 2.0
13 % 3

// cho 16.9
// cho -0.02
// cho 6.8
// cho 4.5
// cho 1

Ngoi tr ton t ly phn d (%) th tt c cc ton t ton hc c th


chp nhn pha trn cc ton hng s nguyn v ton hng s thc. Thng
thng, nu c hai ton hng l s nguyn sau kt qu s l mt s
Chng 2: Biu thc

17

nguyn. Tuy nhin, mt hoc c hai ton hng l s thc th sau kt qu s


l mt s thc (real hay double).
Khi c hai ton hng ca ton t chia l s nguyn th sau php chia
c thc hin nh l mt php chia s nguyn v khng phi l php chia
thng thng m chng ta s dng. Php chia s nguyn lun cho kt qu
nguyn (c ngha l lun c lm trn). V d:
9/2
-9 / 2

// c 4, khng phi l 4.5!


// c -5, khng phi l -4!

Cc php chia s nguyn khng xc nh thng l cc li lp trnh


chung. thu c mt php chia s thc khi c hai ton hng l s nguyn,
bn cn p mt trong hai s nguyn v s thc:
int
int
double

cost = 100;
volume = 80;
unitPrice = cost / (double) volume;

// c 1.25

Ton t ly phn d (%) yu cu c hai ton hng l s nguyn. N tr v


phn d cn li ca php chia. V d 13%3 c tnh ton bng cch chia s
nguyn 13 i 3 c 4 v phn d l 1; v th kt qu l 1.
C th c trng hp mt kt qu ca mt php ton ton hc qu ln
lu tr trong mt bin no . Trng hp ny c gi l trn. Hu qu ca
trn l ph thuc vo my v th n khng c nh ngha.V d:
unsigned char

k = 10 * 92;

// trn: 920 > 255

Chia mt s cho 0 l hon ton khng ng lut. Kt qu ca php chia


ny l mt li run-time gi l li division-by-zero thng lm cho chng
trnh kt thc.

2.2. Ton t quan h


C++ cung cp 6 ton t quan h so snh cc s. Cc ton t ny c tng
kt trong Bng 2.2. Cc ton t quan h c lng v 1 (thay cho kt qu
ng) hoc 0 (thay cho kt qu sai).
Bng 2.2

Cc ton t quan h.
Ton t

==
!=
<
<=
>
>=

Chng 2: Biu thc

Tn
So snh bng
So snh khng bng
So snh h hn
So snh h hn hoc bng
So snh ln hn
So snh ln hn hoc bng

V d

5 == 5
// cho 1
5 != 5
// cho 0
5 < 5.5 // cho 1
5 <= 5
// cho 1
5 > 5.5 // cho 0
6.3 >= 5 // cho 1

18

Ch rng cc ton t <= v >= ch c h tr trong hnh thc hin th.


Ni ring c hai =< v => u khng hp l v khng mang ngha g c.
Cc ton hng ca mt ton t quan h phi c lng v mt s. Cc k
t l cc ton hng hp l v chng c i din bi cc gi tr s. V d (gi
s m ASCII):
'A' < 'F'

// c 1 (ging nh l 65 < 70)

Cc ton t quan h khng nn c dng so snh chui bi v iu


ny s dn n cc a ch ca chui c so snh ch khng phi l ni dung
chui. V d, biu thc
"HELLO" < "BYE"

lm cho a ch ca chui "HELLO" c so snh vi a ch ca chui "BYE".


V cc a ch ny c xc nh bi trnh bin dch, kt qu c th l 0 hoc
c th l 1, cho nn chng ta c th ni kt qu l khng c nh ngha.
C++ cung cp cc th vin hm (v d, strcmp) thc hin so snh
chui.

2.3. Ton t lun l


C++ cung cp ba ton t lun l cho vic kt ni cc biu thc lun l. Cc
ton t ny c tng kt trong Bng 2.3. Ging nh cc ton t quan h, cc
ton t lun l c lng ti 0 hoc 1.
Bng 2.3

Cc ton t lun l.
Ton t

!
&&
||

Tn
Ph nh lun l
V lun l
Hoc lun l

V d
!(5 == 5)
5 < 6 && 6 < 6
5 < 6 || 6 < 5

// c 0
// c 0
// c 1

Ph nh lun l l mt ton t n hng ch ph nh gi tr lun l ton


hng n ca n. Nu ton hng ca n khng l 0 th c 0, v nu n l
khng th c 1.
V lun l cho kt qu 0 nu mt hay c hai ton hng ca n c lng
ti 0. Ngc li, n cho kt qu 1. Hoc lun l cho kt qu 0 nu c hai ton
hng ca n c lng ti 0. Ngc li, n cho kt qu 1.
Ch rng y chng ta ni cc ton hng l 0 v khc 0. Ni chung,
bt k gi tr khng l 0 no c th c dng i din cho ng (true),
trong khi ch c gi tr 0 l i din cho sai (false). Tuy nhin, tt c cc hng
sau y l cc biu thc lun l hp l:
Chng 2: Biu thc

19

!20
10 && 5
10 || 5.5
10 && 0

// c 0
// c 1
// c 1
// c 0

C++ khng c kiu boolean xy dng sn. V l m ta c th s dng


kiu int cho mc ch ny. V d:
int
int

sorted = 0;
balanced = 1;

// false
// true

2.4. Ton t trn bit


C++ cung cp 6 ton t trn bit iu khin cc bit ring l trong mt s
lng s nguyn. Chng c tng kt trong Bng 2.4.
Bng 2.4

Cc ton t trn bit.


Ton t

~
&
|
^
<<
>>

Tn
Ph nh bit
V bit
Hoc bit
Hoc exclusive bit
Dch tri bit
Dch phi bit

V d

~'\011'
'\011' & '\027'
'\011' | '\027'
'\011' ^ '\027'
'\011' << 2
'\011' >> 2

// c '\366'
// c '\001'
// c '\037'
// c '\036'
// c '\044'
// c '\002'

Cc ton t trn bit mong i cc ton hng ca chng l cc s nguyn


v xem chng nh l mt chui cc bit. Ph nh bit l mt ton t n hng
thc hin o cc bit trong ton hng ca n. V bit so snh cc bit tng ng
ca cc ton hng ca n v cho kt qu l 1 khi c hai bit l 1, ngc li l 0.
Hoc bit so snh cc bit tng ng ca cc ton hng ca n v cho kt qu l
0 khi c hai bit l 0, ngc li l 1. XOR bit so snh cc bit tng ng ca
cc ton hng ca n v cho kt qu 0 khi c hai bit l 1 hoc c hai bit l 0,
ngc li l 1.
C hai ton t dch tri bit v dch phi bit ly mt chui bit lm ton
hng tri ca chng v mt s nguyn dng n lm ton hng phi. Ton t
dch tri cho kt qu l mt chui bit sau khi thc hin dch n bit trong chui
bit ca ton hng tri v pha tri. Ton t dch phi cho kt qu l mt chui
bit sau khi thc hin dch n bit trong chui bit ca ton hng tri v pha phi.
Cc bit trng sau khi dch c t ti 0.
Bng 2.5 minh ha chui cc bit cho cc ton hng v d v kt qu trong
Bng 2.4. trnh lo lng v bit du (iu ny ph thuc vo my) thng
th khai bo chui bit nh l mt s khng du:
unsigned char x = '\011';
unsigned char y = '\027';

Chng 2: Biu thc

20

Bng 2.5

Cc bit c tnh ton nh th no.


V d

Gi tr c s 8

x
y
~x
x&y
x|y
x^y
x << 2
x >> 2

011
027
366
001
037
036
044
002

Chui bit

0
0
1
0
0
0
0
0

0
0
1
0
0
0
0
0

0
0
1
0
0
0
1
0

0
1
1
0
1
1
0
0

1
0
0
0
1
1
0
0

0
1
1
0
1
1
1
0

0
1
1
0
1
1
0
1

1
1
0
1
1
0
0
0

2.5. Ton t tng/gim


Cc ton t tng mt (++) v gim mt (--) cung cp cc tin li tng ng
cho vic cng thm 1 vo mt bin s hay tr i 1 t mt bin s. Cc ton t
ny c tng kt trong Bng 2.6. Cc v d gi s nh ngha bin sau:
int
Bng 2.6

k = 5;

Cc ton t tng v gim.


Ton t

++
++
---

Tn
Tng mt (tin t)
Tng mt (hu t)
Gim mt (tin t)
Gim mt (hu t)

V d

++k + 10
k++ + 10
--k + 10
k-- + 10

// c 16
// c 15
// c 14
// c 15

C hai ton t c th c s dng theo hnh thc tin t hay hu t l


hon ton khc nhau. Khi c s dng theo hnh thc tin t th ton t
c p dng trc v kt qu sau c s dng trong biu thc. Khi
c s dng theo hnh thc hu t th biu thc c c lng trc v sau
ton t c p dng.
C hai ton t c th c p dng cho bin nguyn cng nh l bin
thc mc d trong thc t th cc bin thc him khi c dng theo hnh
thc ny.

2.6. Ton t khi to


Ton t khi to c s dng lu tr mt bin. Ton hng tri nn l mt
gi tr tri v ton hng phi c th l mt biu thc bt k. Biu thc c
c lng v kt qu c lu tr trong v tr c ch nh bi gi tr tri.
Gi tr tri l bt k th g ch nh r v tr b nh lu tr mt gi tr.
Ch mt loi ca gi tr tri m chng ta c bit cho n thi im ny l
Chng 2: Biu thc

21

bin. Cc loi khc ca gi tr tri (da trn con tr v tham chiu) s c


tho lun sau.
Ton t khi to c mt s bin th thu c bng cch kt ni n vi
cc ton t ton hc v cc ton t trn bit. Chng c tng kt trong Bng
2.7. Cc v d gi s rng n l mt bin s nguyn.
Bng 2.7

Cc ton t khi to.


Ton t

=
+=
-=
*=
/=
%=
&=
|=
^=
<<=
>>=

V d

Tng ng vi

n = 25
n += 25
n -= 25
n *= 25
n /= 25
n %= 25
n &= 0xF2F2
n |= 0xF2F2
n ^= 0xF2F2
n <<= 4
n >>= 4

n = n + 25
n = n 25
n = n * 25
n = n / 25
n = n % 25
n = n & 0xF2F2
n = n | 0xF2F2
n = n ^ 0xF2F2
n = n << 4
n = n >> 4

Php ton khi to chnh n l mt biu thc m gi tr ca n l gi tr


c lu trong ton hng tri ca n. V th mt php ton khi to c th
c s dng nh l ton hng phi ca mt php ton khi to khc. Bt k
s lng khi to no c th c kt ni theo cch ny hnh thnh mt
biu thc. V d:
int m, n, p;
m = n = p = 100;
// ngha l: n = (m = (p = 100));
m = (n = p = 100) + 2; // ngha l: m = (n = (p = 100)) + 2;

Vic ny c th ng dng tng t cho cc hnh thc khi to khc. V d:


m = 100;
m += n = p = 10;

// ngha l: m = m + (n = p = 10);

2.7. Ton t iu kin


Ton t iu kin yu cu 3 ton hng. Hnh thc chung ca n l:
ton hng 1 ? ton hng 2 : ton hng 3
Ton hng u tin c c lng v c xem nh l mt iu kin. Nu
kt qu khng l 0 th ton hng 2 c c lng v gi tr ca n l kt qu
sau cng. Ngc li, ton hng 3 c c lng v gi tr ca n l kt qu
sau cng. V d:
Chng 2: Biu thc

22

int m = 1, n = 2;
int min = (m < n ? m : n);

// min nhn gi tr 1

Ch rng trong cc ton hng th 2 v ton hng th 3 ca ton t iu


kin th ch c mt ton hng c thc hin. iu ny l quan trng khi mt
hoc c hai cha hiu ng ph (ngha l, vic c lng ca chng lm
chuyn i gi tr ca bin). V d, vi m=1 v n=2 th trong
int min = (m < n ? m++ : n++);

m c tng ln bi v m++ c c lng nhng n khng tng v n++


khng c c lng.
Bi v chnh php ton iu kin cng l mt biu thc nn n c th
c s dng nh mt ton hng ca php ton iu kin khc, c ngha l
cc biu thc iu kin c th c lng nhau. V d:
int m = 1, n = 2, p =3;
int min = (m < n ? (m < p ? m : p)
: (n < p ? n : p));

2.8. Ton t phy


Nhiu biu thc c th c kt ni vo cng mt biu thc s dng ton t
phy. Ton t phy yu cu 2 ton hng. u tin n c lng ton hng tri
sau l ton hng phi, v tr v gi tr ca ton hng phi nh l kt qu
sau cng. V d:
int m=1, n=2, min;
int mCount = 0, nCount = 0;
//...
min = (m < n ? mCount++, m : nCount++, n);

y khi m nh hn n, mCount++ c c lng v gi tr ca m c lu


trong min. Ngc li, nCount++ c c lng v gi tr ca n c lu
trong min.

2.9. Ton t ly kch thc


C++ cung cp ton t hu dng, sizeof, tnh ton kch thc ca bt k
hng mc d liu hay kiu d liu no. N yu cu mt ton hng duy nht c
th l tn kiu (v d, int) hay mt biu thc (v d, 100) v tr v kch thc
ca nhng thc th ch nh theo byte. Kt qu hon ton ph thuc vo
my. Danh sch 2.1 minh ha vic s dng ton t sizeof cho cc kiu c sn
m chng ta gp cho n thi im ny.

Chng 2: Biu thc

23

Danh sch 2.1


1 #include <iostream.h>
2 int main (void)
3 {
4
cout << "char size = " << sizeof(char) << " bytes\n";
5
cout << "char* size = " << sizeof(char*) << " bytes\n";
6
cout << "short size = " << sizeof(short) << " bytes\n";
7
cout << "int size = " << sizeof(int) << " bytes\n";
8
cout << "long size = " << sizeof(long) << " bytes\n";
9
cout << "float size = " << sizeof(float) << " bytes\n";
10
cout << "double size = " << sizeof(double) << " bytes\n";
11
cout << "1.55 size = " << sizeof(1.55) << " bytes\n";
12
cout << "1.55L size = " << sizeof(1.55L) << " bytes\n";
13
cout << "HELLO size = " << sizeof("HELLO") << " bytes\n";
14 }

Khi chy, chng trnh s cho kt qu sau (trn my tnh c nhn):


char size = 1 bytes
char* size = 2 bytes
short size = 2 bytes
int size = 2 bytes
long size = 4 bytes
float size = 4 bytes
double size = 8 bytes
1.55 size = 8 bytes
1.55L size = 10 bytes
HELLO size = 6 bytes

2.10. u tin ca cc ton t


Th t m cc ton t c c lng trong mt biu thc l rt quan trng
v c xc nh theo cc lut u tin. Cc lut ny chia cc ton t C++ ra
thnh mt s mc u tin (xem Bng 2.8). Cc ton t mc cao hn s
c u tin cao hn cc ton t c u tin thp hn.
Bng 2.8
Mc
Cao nht

u tin ca cc ton t.
::
()
+
->*
*
+
<<
<
==
&

Chng 2: Biu thc

Ton t

[]
++
-.*
/
>>
<=
!=

->
!
~

.
*
&

%
>

>=

new
delete

sizeof
()

Loi
n hng
Nh hng

Th t
C hai
Tri ti phi

n hng

Phi ti tri

Nh hng
Nh hng
Nh hng
Nh hng
Nh hng
Nh hng
Nh hng

Tri ti phi
Tri ti phi
Tri ti phi
Tri ti phi
Tri ti phi
Tri ti phi
Tri ti phi

24

^
|
&&
||
?:
=
Thp nht

+=
-=

*=
/=

^=
%=

&=
|=

<<=
>>=

Nh hng
Nh hng
Nh hng
Nh hng
Tam hng

Tri ti phi
Tri ti phi
Tri ti phi
Tri ti phi
Tri ti phi

Nh hng

Phi ti tri

Nh hng

Tri ti phi

V d, trong biu thc


a == b + c * d

c * d c c lng trc bi v ton t * c u tin cao hn ton t + v


==. Sau kt qu c cng ti b bi v ton t + c u tin cao hn ton
t ==, v sau == c c lng. Cc lut u tin c th c cho quyn
cao hn thng qua vic s dng cc du ngoc. V d, vit li biu thc trn
nh sau
a == (b + c) * d

s lm cho ton t + c c lng trc ton t *.


Cc ton t vi cng mc u tin c c lng theo th t c
c lng trong ct cui cng trong Bng 2.8. V d, trong biu thc
a = b += c

th t c lng l t phi sang tri, v th b += c c c lng trc v k


l a = b.

2.11.Chuyn kiu n gin


Mt gi tr thuc v nhng kiu xy dng sn m chng ta bit n thi im
ny u c th c chuyn v bt k mt kiu no khc. V d:
(int) 3.14
// chuyn 3.14 sang int c 3
(long) 3.14
// chuyn 3.14 sang long c 3L
(double) 2
// chuyn 2 sang double c 2.0
(char) 122
// chuyn 122 sang char c m l 122
(unsigned short) 3.14 // c 3 nh l mt unsigned short

Nh c trnh by trong cc v d, cc nh danh kiu xy dng sn


c th c s dng nh cc ton t kiu. Cc ton t kiu l n hng
(ngha l ch c mt ton hng) v xut hin bn trong cc du ngoc v bn
tri ton hng ca chng. iu ny c gi l chuyn kiu tng minh.
Khi tn kiu ch l mt t th c th t du ngoc xung quanh ton hng:
int(3.14)

Chng 2: Biu thc

// nh l: (int) 3.14

25

Trong mt vi trng hp, C++ cng thc hin chuyn kiu khng
tng minh. iu ny xy ra khi cc gi tr ca cc kiu khc nhau c trn
ln trong mt biu thc. V d:
double
int
i = i + d;

d = 1;
i = 10.5;

// d nhn 1.0
// i nhn 10
// ngha l: i = int(double(i) + d)

Trong v d cui , i + d bao hm cc kiu khng hp nhau, v th trc tin i


c chuyn thnh double (thng cp) v sau c cng vo d. Kt qu l
double khng hp kiu vi i trn pha tri ca php gn, v th n c chuyn
thnh int (h cp) trc khi c gn cho i.
Lut trn i din cho mt vi trng hp chung n gin chuyn
kiu. Cc trng hp phc tp hn s c trnh by phn sau ca gio
trnh sau khi chng ta tho lun cc kiu d liu khc.

Bi tp cui chng 2
2.1

Vit cc biu thc sau y:


Kim tra mt s n l chn hay khng.
Kim tra mt k t c l mt s hay khng.
Kim tra mt k t c l mt mu t hay khng.
Thc hin kim tra: n l l v dng hoc n chn v m.
t li k bit ca mt s nguyn n ti 0.
t k bit ca mt s nguyn n ti 1.
Cho gi tr tuyt i ca mt s n.
Cho s k t trong mt chui s c kt thc bi k t null.

2.2

Thm cc du ngoc ph vo cc biu thc sau hin th r rng th t cc


ton t c c lng:

(n <= p + q && n >= p - q || n == 0)

(++n * q-- / ++p - q)


(n | p & q ^ p << 2 + q)
(p < q ? n < p ? q * n - 2 : q / n + 1 : q - n)

2.3

Cho bit gi tr ca mi bin sau y sau khi khi to n:


double
long
char
char

2.4

d = 2 * int(3.14);
k = 3.14 - 3;
c = 'a' + 2;
c = 'p' + 'A' - 'a';

Vit mt chng trnh cho php nhp vo mt s nguyn dng n v xut ra


gi tr ca n m 2 v 2 m n.

Chng 2: Biu thc

26

2.5

Vit mt chng trnh cho php nhp ba s v xut ra thng ip Sorted nu


cc s l tng dn v xut ra Not sorted trong trng hp ngc li.

Chng 2: Biu thc

27

You might also like