You are on page 1of 29

Trng i hc Khoa hc T nhin

Khoa Cng ngh thng tin


B mn Tin hc c s

NHP MN LP TRNH

ng Bnh Phng

dbphuong@fit.hcmuns.edu.vn

CC K THUT
THAO TC TRN BIT

VC

&
BB

Ni dung

Cc ton t logic

Cc ton t dch bit

Cc ng dng

Bi tp

NMLT - Cc k thut thao tc trn bit

VC

&
BB

n v o thng tin

Hai trng thi tt-0 v m-1 (nh phn).


K s nh phn (Binary Digit) bit
bit - n v cha thng tin nh nht.
Cc n v o thng tin ln hn:
Tn gi

K hiu

Gi tr

Byte

8 bit

KiloByte

KB

210 B = 1024 Byte

MegaByte

MB

210 KB = 220 Byte

GigaByte

GB

210 MB = 230 Byte

TeraByte

TB

210 GB = 240 Byte

PentaByte

PB

210 TB = 250 Byte


NMLT - Cc k thut thao tc trn bit

VC

&
BB

n v o thng tin
0

1 bit

2
1

2 bit

22
2

0
23

3 bit
n-1
n bit

2n

0000 1111 = 2n 1
NMLT - Cc k thut thao tc trn bit

VC

&
BB

Biu din thng tin trong MTT

c im
c lu trong cc thanh ghi hoc trong cc
nh. Thanh ghi hoc nh c kch thc 1
byte (8 bit) hoc 1 word (16 bit).
Biu din s nguyn khng du, s nguyn c
du, s thc v k t.
Hai loi bit c bit
msb (most significant bit): bit nng nht (bit n)
lsb (least significant bit): bit nh nht (bit 0)
NMLT - Cc k thut thao tc trn bit

VC

&
BB

Biu din s nguyn khng du

c im
Biu din cc i lng lun dng.
V d: chiu cao, cn nng, m ASCII
Tt c bit c s dng biu din gi tr.
S nguyn khng du 1 byte ln nht l
1111 11112 = 28 1 = 25510.
S nguyn khng du 1 word ln nht l
1111 1111 1111 11112 = 216 1 = 6553510.
Ty nhu cu c th s dng s 2, 3 word.
lsb = 1 th s l s l s l.
NMLT - Cc k thut thao tc trn bit

VC

&
BB

Biu din s nguyn c du

c im
Lu cc s dng hoc m.
Bit msb dng biu din du
msb = 0 biu din s dng. VD: 0101 0011
msb = 1 biu din s m. VD: 1101 0011

Trong my tnh, s m c biu din dng


s b 2.

NMLT - Cc k thut thao tc trn bit

VC

&
BB

S b 1 v s b 2

S 5 (byte)

S b 1 ca 5

S b 2 ca 5

+ S 5

Kt qu

NMLT - Cc k thut thao tc trn bit

VC

&
BB

Biu din s nguyn c du

Nhn xt
S b 2 ca x cng vi x l mt dy ton bit 0
(khng tnh bit 1 cao nht do vt qu phm
vi lu tr). Do s b 2 ca x chnh l gi tr
m ca x hay x.
i s thp phn m 5 sang nh phn?
i 5 sang nh phn ri ly s b 2 ca n.

Thc hin php ton a b?


a b = a + (b) => Cng vi s b 2 ca b.

NMLT - Cc k thut thao tc trn bit

VC

&
BB

Tnh gi tr c du v khng du

Tnh gi tr khng du v c du ca 1 s?
V d s word (16 bit): 1100 1100 1111 0000
S nguyn khng du ?
Tt c 16 bit lu gi tr.
=> gi tr l 52464.

S nguyn c du ?
Bit msb = 1 do s ny l s m.
=> ln l gi tr ca s b 2.
S b 2 = 0011 0011 0001 0000 = 13072.
=> gi tr l 13072.
NMLT - Cc k thut thao tc trn bit

10

&

VC

BB

Tnh gi tr c du v khng du

HEX

Khng du

C du

HEX

Khng du

C du

msb = 0

00
01
02

7E
7F

0
1
2

126
127

0
1
2

126
127

0000
0001
0002

7FFE
7FFF

0
1
2

32766
32767

0
1
2

32766
32767

msb = 1

Bng gi tr s khng du/c du (byte & word)

80
81

FE
FF

128
129

254
255

128
127

2
1

8000
8001

FFFE
FFFF

32768
32769

65534
65535

32768
32767

2
1

NMLT - Cc k thut thao tc trn bit

11

VC

&
BB

Tnh gi tr c du v khng du

Nhn xt
msb=0 gi tr c du bng gi tr khng du.
msb=1 th gi tr c du bng gi tr khng
du tr 28=256 (byte) hay 216=65536 (word).
Tnh gi tr khng du v c du ca 1 s?
V d s word (16 bit): 1100 1100 1111 0000
Gi tr khng du l 52464.
Gi tr c du: v bit msb = 1 nn gi tr c du
bng 52464 65536 = 13072.
NMLT - Cc k thut thao tc trn bit

12

&

VC

BB

Cc ton t trn bit

Ton t & (and)


&

V d
int x = 2912, y = 1706, z = x & y;
15 14 13 12 11 10

&

0 0 0 0 1 0 1 1 0 1 1 0 0 0 0 0
0 0 0 0 0 1 1 0 1 0 1 0 1 0 1 0

544 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0
NMLT - Cc k thut thao tc trn bit

13

&

VC

BB

Cc ton t trn bit

Ton t | (or)
|

V d
int x = 2912, y = 1706, z = x | y;
15 14 13 12 11 10

0 0 0 0 1 0 1 1 0 1 1 0 0 0 0 0
0 0 0 0 0 1 1 0 1 0 1 0 1 0 1 0

4074 0 0 0 0 1 1 1 1 1 1 1 0 1 0 1 0
NMLT - Cc k thut thao tc trn bit

14

&

VC

BB

Cc ton t trn bit

Ton t ^ (xor)
^

V d
int x = 2912, y = 1706, z = x ^ y;
15 14 13 12 11 10

0 0 0 0 1 0 1 1 0 1 1 0 0 0 0 0
0 0 0 0 0 1 1 0 1 0 1 0 1 0 1 0

3530 0 0 0 0 1 1 0 1 1 1 0 0 1 0 1 0
NMLT - Cc k thut thao tc trn bit

15

&

VC

BB

Cc ton t trn bit

Ton t ~ (not)
~

V d
int x = 2912, z = ~x;
15 14 13 12 11 10

0 0 0 0 1 0 1 1 0 1 1 0 0 0 0 0

-2913 1 1 1 1 0 1 0 0 1 0 0 1 1 1 1 1

NMLT - Cc k thut thao tc trn bit

16

VC

&

Cc ton t trn bit

BB

Ton t << n (shift left)


Dch cc bit sang tri n v tr.
Cc bit vt qu phm vi lu tr s mt.
T ng thm bit 0 vo cui dy bit.
V d
int x = 2912, z = x << 2;
15 14 13 12 11 10

11648
5824 0

0 0 0 1 0 1 1 0 1 1 0 0 0 0 0

NMLT - Cc k thut thao tc trn bit

17

VC

&

Cc ton t trn bit

BB

Ton t >> n (shift right)


Dch cc bit sang phi n v tr.
Cc bit vt qu phm vi lu tr s mt.
Gi li bit nng nht (msb) du ca s
V d
int x = 2912, z = x >> 2;
15 14 13 12 11 10

1456
728 0

0 0 0 1 0 1 1 0 1 1 0 0 0 0 0

msb 0
NMLT - Cc k thut thao tc trn bit

18

VC

&
BB

Cc ton t trn bit

Lu
Khng c nhm ln cc cc ton t trn bit
(&, |, ~) vi cc ton t kt hp (&&, || , !)
Cc ton t gp: &= |= ^= <<= >>=
My tnh lm vic trn bit nn cc thao tc
trn h nh phn s nhanh hn rt nhiu so
vi h khc.
Phi lun nh di ca dy bit ang lm
vic (8bit, 16bit, 32bit, 64bit, )
NMLT - Cc k thut thao tc trn bit

19

VC

&
BB

ng dng trn s nguyn

ng dng ca cc ton t &, |, ^, ~


a. Bt bit th i ca bin n (onbit)
b. Tt bit th i ca bin n (offbit)
c. Ly gi tr ca bit th i ca bin n (getbit)
d. Gn gi tr 0 cho bin n (setzero)
ng dng ca cc ton t dch bit << v >>
e. Nhn n vi 2i (mul2pow)
f. Chia n vi 2i (div2pow)

NMLT - Cc k thut thao tc trn bit

20

VC

&
BB

Bt bit th i ca bin n
i=9
15 14 13 12 11 10

ni | 0 = ni
ni | 1 = 1
8

n15 n14 n13 n12 n11 n10 n9 n8 n7 n6 n5 n4 n3 n2 n1 n0

| 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
n15 n14 n13 n12 n11 n10

n8 n7 n6 n5 n 4 n3 n2 n1 n0

void onbit(int &n, int i)


{
n = n | (0x1 << i);
}
NMLT - Cc k thut thao tc trn bit

21

VC

&
BB

Tt bit th i ca bin n
i=9
15 14 13 12 11 10

ni & 1 = ni
ni & 0 = 0
8

n15 n14 n13 n12 n11 n10 n9 n8 n7 n6 n5 n4 n3 n2 n1 n0

& 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1
n15 n14 n13 n12 n11 n10

n8 n7 n6 n5 n 4 n3 n2 n1 n0

void offbit(int &n, int i)


{
n = n & (~(0x1 << i));
}
NMLT - Cc k thut thao tc trn bit

22

VC

&
BB

Ly gi tr bit th i ca bin n
i=9
15 14 13 12 11 10

n n015 n014 n013 n012 n011 n010 n09 n08 n07

n6 n5 n 4 n3 n2 n1 n0

& 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

n9

int getbit(int n, int i)


{
return (n >> i) & 0x1;
}
NMLT - Cc k thut thao tc trn bit

23

VC

&
BB

Gn gi tr 0 cho bin n
ni ^ ni = 0
15 14 13 12 11 10

n15 n14 n13 n12 n11 n10 n9 n8 n7 n6 n5 n4 n3 n2 n1 n0

n15 n14 n13 n12 n11 n10 n9 n8 n7 n6 n5 n4 n3 n2 n1 n0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
void setzero(int &n)
{
n = n ^ n;
}
NMLT - Cc k thut thao tc trn bit

24

VC

&
BB

Nhn n vi 2i

c im ton t <<
n = (nj2j) vi j [0, k] (k l ch s bit msb)
Dch tri i bit s m mi k s tng thm i
n << i = (nj2j+i) = 2i(nj2j) = 2in
Vy, dch tri i bit nhn vi 2i
int mul2powi(int n, int i)
{
return n << i;
}
NMLT - Cc k thut thao tc trn bit

25

VC

&
BB

Chia n vi 2i

c im ton t >>
n = (nj2j) vi j [0, k] (k l ch s bit msb)
Dch phi i bit s m mi k s gim i i
n << i = (nj2ji) = 2i(nj2j) = 2in = n/2i
Vy, dch phi i bit chia cho 2i
int div2powi(int n, int i)
{
return n >> i;
}
NMLT - Cc k thut thao tc trn bit

26

VC

&
BB

Bi tp thc hnh

Bi 1: Vit hm thc hin cc thao tc trn bit.


Bi 2: Vit bitcount m s lng bit 1 ca mt
s nguyn dng n.
Bi 3: Cho mng a gm n s nguyn khc nhau.
Vit hm lit k cc t hp 1, 2, , n phn t
ca s nguyn (khng cn theo th t)
V d, n = 3, mng a = {1, 2, 3}
{1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}
Bi 4: Ging bi 3 nhng ch lit k cc t hp k
phn t (1 k n)
NMLT - Cc k thut thao tc trn bit

27

VC

&

Bi tp thc hnh

BB

Bi 5: Vit hm RotateLeft(n, i) thc hin thao


tc xoay cc bit ca n (k du) sang tri i v tr
v cc bit b mt s c a vo cui dy bit.
V d
int n = 291282; n = RotateLeft(n, 2);
15 14 13 12 11 10

??? 0

1 1 1 0 0 0 1 1 1 0 0 0 0 1 0

Bi 6: Tng t bi 2 nhng vit hm


RotateRight(n, i) xoay bit sang phi.
NMLT - Cc k thut thao tc trn bit

28

VC

&
BB

Bi 3 (gi )
a

c }

c }

{ a

{ a

c }

{ a

{ a

c }

NMLT - Cc k thut thao tc trn bit

29

You might also like