KTLT C21 CacKyThuatThaoTacTrenBIT - PPT (By Bsquochoai - Ga)

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 29

B mn Cng ngh phn mm

Khoa Cng ngh thng tin


Trng i hc Khoa hc T nhin

K THUT LP TRNH
ThS. ng Bnh Phng
dbphuong@fit.hcmus.edu.vn

CC K THUT
THAO TC TRN BIT

1
&
VC
BB
Ni dung

1 Cc ton t logic

2 Cc ton t dch bit

3 Cc ng dng

4 Bi tp

Cc k thut thao tc trn bit


2
&
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 B 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
Cc k thut thao tc trn bit
3
&
VC
BB
n v o thng tin
0
1 bit 2

1 0
2 bit 22

2 1 0
3 bit 23

n-1 5 4 3 2 1 0
n bit 2n

0000 1111 = 2n 1
Cc k thut thao tc trn bit
4
&
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)

Cc k thut thao tc trn bit


5
&
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.
Cc k thut thao tc trn bit
6
&
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.

Cc k thut thao tc trn bit


7
&
VC
BB
S b 1 v s b 2

S 5 (byte) 0 0 0 0 0 1 0 1

S b 1 ca 5 1 1 1 1 1 0 1 0

+ 1

S b 2 ca 5 1 1 1 1 1 0 1 1

+ S 5 0 0 0 0 0 1 0 1

Kt qu 1 0 0 0 0 0 0 0 0

Cc k thut thao tc trn bit


8
&
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.

Cc k thut thao tc trn bit


9
&
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.
Cc k thut thao tc trn bit
10
&
VC
BB
Tnh gi tr c du v khng du

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


HEX Khng du C du HEX Khng du C du
00 0 0 0000 0 0
01 1 1 0001 1 1
msb = 0

02 2 2 0002 2 2


7E 126 126 7FFE 32766 32766
7F 127 127 7FFF 32767 32767
80 128 128 8000 32768 32768
81 129 127 8001 32769 32767
msb = 1



FE 254 2 FFFE 65534 2
FF 255 1 FFFF 65535 1
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.

Cc k thut thao tc trn bit


12
&
VC
BB
Cc ton t trn bit

Ton t & (and)


& 0 1
0 0 0
1 0 1
V d
int x = 2912, y = 1706, z = x & y;
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

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
Cc k thut thao tc trn bit
13
&
VC
BB
Cc ton t trn bit

Ton t | (or)
| 0 1
0 0 1
1 1 1
V d
int x = 2912, y = 1706, z = x | y;
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

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
Cc k thut thao tc trn bit
14
&
VC
BB
Cc ton t trn bit

Ton t ^ (xor)
^ 0 1
0 0 1
1 1 0
V d
int x = 2912, y = 1706, z = x ^ y;
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

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
Cc k thut thao tc trn bit
15
&
VC
BB
Cc ton t trn bit

Ton t ~ (not)
~ 0 1
1 0

V d
int x = 2912, z = ~x;
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

~ 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

Cc k thut thao tc trn bit


16
&
VC
BB
Cc ton t trn bit

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 9 8 7 6 5 4 3 2 1 0

5824 0
11648 0 0 0 1 0 1 1 0 1 1 0 0 0 0 0

Cc k thut thao tc trn bit


17
&
VC
BB
Cc ton t trn bit

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 9 8 7 6 5 4 3 2 1 0

728 0
1456 0 0 0 1 0 1 1 0 1 1 0 0 0 0 0

msb 0
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, )

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)

Cc k thut thao tc trn bit


20
&
VC
BB
Bt bit th i ca bin n
i=9 ni | 0 = ni
ni | 1 = 1

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

n 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 1 n8 n7 n6 n5 n4 n3 n2 n1 n0

void onbit(int &n, int i)


{
n = n | (0x1 << i);
}

Cc k thut thao tc trn bit


21
&
VC
BB
Tt bit th i ca bin n
i=9 ni & 1 = ni
ni & 0 = 0

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

n 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 0 n8 n7 n6 n5 n4 n3 n2 n1 n0

void offbit(int &n, int i)


{
n = n & (~(0x1 << i));
}

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 9 8 7 6 5 4 3 2 1 0

n n015 n014 n013 n012 n011 n010 n09 n08 n07 n6 n5 n4 n 3 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;
}

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 9 8 7 6 5 4 3 2 1 0

n 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;
}

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;
}

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;
}

Cc k thut thao tc trn bit


26
&
VC
BB
Bi tp

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)
Cc k thut thao tc trn bit
27
&
VC
BB
Bi tp

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 9 8 7 6 5 4 3 2 1 0

??? 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.

Cc k thut thao tc trn bit


28
&
VC
BB
Bi 3

a b c

0 0 0 0 { }
1 0 0 1 { c }
2 0 1 0 { b }
3 0 1 1 { b c }
4 1 0 0 { a }
5 1 0 1 { a c }
6 1 1 0 { a b }
7 1 1 1 { a b c }
Cc k thut thao tc trn bit
29

You might also like