Professional Documents
Culture Documents
NMLT C14 CacKyThuatThaoTacTrenBIT in
NMLT C14 CacKyThuatThaoTacTrenBIT in
4 Bài tập
&& &&
VC
VC
BB
BB
Đơn vị đo thông tin VC
VC
BB
BB
Đơn vị đo thông tin
0
Hai trạng thái tắt-0 và mở-1 (nhị phân). 1 bit 2
Ký số nhị phân (Binary Digit) – bit
1 0
bit - Đơn vị chứa thông tin nhỏ nhất.
2 bit 22
Các đơn vị đo thông tin lớn hơn:
Tên gọi Ký hiệu Giá trị 2 1 0
Byte B 8 bit 3 bit 23
KiloByte KB 210 B = 1024 Byte
MegaByte MB 210 KB = 220 Byte
n-1 5 4 3 2 1 0
GigaByte GB 210 MB = 230 Byte n bit … 2n
TeraByte TB 210 GB = 240 Byte
PentaByte PB 210 TB = 250 Byte 0…000 Æ 1…111 = 2n – 1
NMLT - Các kỹ thuật thao tác trên bit 3 NMLT - Các kỹ thuật thao tác trên bit 4
&& &&
VC
VC
BB
BB
Biểu diễn thông tin trong MTĐT VC
VC
BB
BB
Biểu diễn số nguyên không dấu
&& &&
VC
VC
BB
BB
Biểu diễn số nguyên có dấu VC
VC
BB
BB
Số bù 1 và số bù 2
Đặc điểm
Số 5 (byte) 0 0 0 0 0 1 0 1
Lưu các số dương hoặc âm.
Số bù 1 của 5 1 1 1 1 1 0 1 0
Bit msb dùng để biểu diễn dấu
• msb = 0 biểu diễn số dương. VD: 0101 0011 + 1
• msb = 1 biểu diễn số âm. VD: 1101 0011
Số bù 2 của 5 1 1 1 1 1 0 1 1
Trong máy tính, số âm được biểu diễn ở dạng
số bù 2. + Số 5 0 0 0 0 0 1 0 1
Kết quả 1 0 0 0 0 0 0 0 0
NMLT - Các kỹ thuật thao tác trên bit 7 NMLT - Các kỹ thuật thao tác trên bit 8
&& &&
VC
VC
BB
BB
Biểu diễn số nguyên có dấu VC
VC
BB
BB
Tính giá trị có dấu và không dấu
Nhận xét Tính giá trị không dấu và có dấu của 1 số?
Số bù 2 của x cộng với x là một dãy toàn bit 0 Ví dụ số word (16 bit): 1100 1100 1111 0000
(không tính bit 1 cao nhất do vượt quá phạm Số nguyên không dấu ?
vi lưu trữ). Do đó số bù 2 của x chính là giá trị • Tất cả 16 bit lưu giá trị.
âm của x hay – x. => giá trị là 52464.
Đổi số thập phân âm –5 sang nhị phân? Số nguyên có dấu ?
Î Đổi 5 sang nhị phân rồi lấy số bù 2 của nó. • Bit msb = 1 do đó số này là số âm.
Thực hiện phép toán a – b? => độ lớn là giá trị của số bù 2.
Îa – b = a + (–b) => Cộng với số bù 2 của b. • Số bù 2 = 0011 0011 0001 0000 = 13072.
=> giá trị là –13072.
NMLT - Các kỹ thuật thao tác trên bit 9 NMLT - Các kỹ thuật thao tác trên bit 10
&& &&
VC
VC
BB
BB
Tính giá trị có dấu và không dấu VC
VC
BB
BB
Tính giá trị có dấu và không dấu
Bảng giá trị số không dấu/có dấu (byte & word) Nhận xét
HEX Không dấu Có dấu HEX Không dấu Có dấu msb=0 Î giá trị có dấu bằng giá trị không dấu.
00 0 0 0000 0 0 msb=1 Î thì giá trị có dấu bằng giá trị không
01 1 1 0001 1 1
dấu trừ 28=256 (byte) hay 216=65536 (word).
msb = 0
02 2 2 0002 2 2
… … … … … …
… … … … … … Tính giá trị không dấu và có dấu của 1 số?
7E 126 126 7FFE 32766 32766
7F 127 127 7FFF 32767 32767 Ví dụ số word (16 bit): 1100 1100 1111 0000
80 128 –128 8000 32768 –32768 Giá trị không dấu là 52464.
81 129 –127 8001 32769 –32767
msb = 1
0 0 0 0 1 0 1 1 0 1 1 0 0 0 0 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 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 4074 0 0 0 0 1 1 1 1 1 1 1 0 1 0 1 0
NMLT - Các kỹ thuật thao tác trên bit 13 NMLT - Các kỹ thuật thao tác trên bit 14
&& &&
VC
VC
BB
BB
Các toán tử trên bit VC
VC
BB
BB
Các toán tử trên bit
0 0 0 0 1 0 1 1 0 1 1 0 0 0 0 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
-2913 1 1 1 1 0 1 0 0 1 0 0 1 1 1 1 1
3530 0 0 0 0 1 1 0 1 1 1 0 0 1 0 1 0
NMLT - Các kỹ thuật thao tác trên bit 15 NMLT - Các kỹ thuật thao tác trên bit 16
&& &&
VC
VC
BB
BB
Các toán tử trên bit VC
VC
BB
BB
Các toán tử trên bit
11648
5824 0 0 0 0 1 0 1 1 0 1 1 0 0 0 0 0 1456
728 0 0 0 0 1 0 1 1 0 1 1 0 0 0 0 0
msb 0
NMLT - Các kỹ thuật thao tác trên bit 17 NMLT - Các kỹ thuật thao tác trên bit 18
&& &&
VC
VC
BB
BB
Các toán tử trên bit VC
VC
BB
BB
Ứng dụng trên số nguyên
NMLT - Các kỹ thuật thao tác trên bit 19 NMLT - Các kỹ thuật thao tác trên bit 20
&& &&
VC
VC
BB
BB
Bật bit thứ i của biến n VC
VC
BB
BB
Tắt bit thứ i của biến n
i=9 ni | 0 = ni i=9 ni & 1 = ni
ni | 1 = 1 ni & 0 = 0
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 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 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 & 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1
n15 n14 n13 n12 n11 n10 1 n8 n7 n6 n5 n4 n3 n2 n1 n0 n15 n14 n13 n12 n11 n10 0 n8 n7 n6 n5 n4 n3 n2 n1 n0
NMLT - Các kỹ thuật thao tác trên bit 21 NMLT - Các kỹ thuật thao tác trên bit 22
&& &&
VC
VC
BB
BB
Lấy giá trị bit thứ i của biến n VC
VC
BB
BB
Gán giá trị 0 cho biến n
i=9
ni ^ ni = 0
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 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 n3 n2 n1 n0 n 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 n9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
NMLT - Các kỹ thuật thao tác trên bit 23 NMLT - Các kỹ thuật thao tác trên bit 24
&& &&
VC
VC
BB
BB
Nhân n với 2i VC
VC
BB
BB
Chia n với 2i
NMLT - Các kỹ thuật thao tác trên bit 25 NMLT - Các kỹ thuật thao tác trên bit 26
&& &&
VC
VC
BB
BB
Bài tập thực hành VC
VC
BB
BB
Bài tập thực hành
Bài 1: Viết hàm thực hiện các thao tác trên bit. Bài 5: Viết hàm RotateLeft(n, i) thực hiện thao
Bài 2: Viết bitcount đếm số lượng bit 1 của một tác “xoay” các bit của n (kô dấu) sang trái i vị trí
số nguyên dương n. và các bit bị mất sẽ được đưa vào cuối dãy bit.
Bài 3: Cho mảng a gồm n số nguyên khác nhau. Ví dụ
Viết hàm liệt kê các tổ hợp 1, 2, …, n phần tử int n = 291282; n = RotateLeft(n, 2);
của số nguyên đó (không cần theo thứ tự) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
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 }
NMLT - Các kỹ thuật thao tác trên bit 29