NKK-HUST
.c
om
Kiến trúc máy tính
cu
u
du
on
g
th
an
co
ng
Chương 4
SỐ HỌC MÁY TÍNH
Nguyễn Kim Khánh
Trường Đại học Bách khoa Hà Nội
2017
Kiến trúc máy tính
CuuDuongThanCong.com
134
/>
NKK-HUST
Nội dung học phần
cu
u
du
on
g
th
an
co
ng
.c
om
Chương 1. Giới thiệu chung
Chương 2. Cơ bản về logic số
Chương 3. Hệ thống máy tính
Chương 4. Số học máy tính
Chương 5. Kiến trúc tập lệnh
Chương 6. Bộ xử lý
Chương 7. Bộ nhớ máy tính
Chương 8. Hệ thống vào-ra
Chương 9. Các kiến trúc song song
2017
Kiến trúc máy tính
CuuDuongThanCong.com
135
/>
NKK-HUST
om
Nội dung chương 4
cu
u
du
on
g
th
an
co
ng
.c
4.1. Biểu diễn số nguyên
4.2. Phép cộng và phép trừ số nguyên
4.3. Phép nhân và phép chia số nguyên
4.4. Số dấu phẩy động
2017
Kiến trúc máy tính
CuuDuongThanCong.com
136
/>
NKK-HUST
.c
om
4.1. Biểu diễn số nguyên
ng
co
cu
u
du
on
g
th
n
Số nguyên không dấu (Unsigned Integer)
Số ngun có dấu (Signed Integer)
an
n
2017
Kiến trúc máy tính
CuuDuongThanCong.com
137
/>
NKK-HUST
1. Biểu diễn số nguyên không dấu
om
Nguyên tắc tổng quát: Dùng n bit biểu diễn số
nguyên không dấu A:
.c
n
an
co
ng
an−1an−2 ... a2 a1a0
cu
u
du
on
g
th
Giá trị của A được tính như sau:
A = ∑ ai 2
i
i=0
Dải biểu diễn của A:
2017
n−1
[0, 2n – 1]
Kiến trúc máy tính
CuuDuongThanCong.com
138
/>
NKK-HUST
Ví dụ 1
om
Biểu diễn các số ngun khơng dấu sau đây
bằng 8-bit:
A = 41 ; B = 150
Giải:
A = 41 = 32 + 8 + 1 = 25 + 23 + 20
41 = 0010 1001
du
on
g
th
an
co
ng
.c
n
cu
u
B = 150 = 128 + 16 + 4 + 2 = 27 + 24 + 22 + 21
150 = 1001 0110
2017
Kiến trúc máy tính
CuuDuongThanCong.com
139
/>
NKK-HUST
Ví dụ 2
n
N = 1011 1001
ng
M = 0001 0010
co
n
.c
om
Cho các số nguyên không dấu M, N được
biểu diễn bằng 8-bit như sau:
an
n
g
th
Xác định giá trị của chúng ?
du
on
Giải:
M = 0001 0010 = 24 + 21 = 16 +2 = 18
n
N = 1011 1001 = 27 + 25 + 24 + 23 + 20
cu
u
n
= 128 + 32 + 16 + 8 + 1 = 185
2017
Kiến trúc máy tính
CuuDuongThanCong.com
140
/>
NKK-HUST
Với n = 8 bit
om
Biểu diễn được các giá trị từ 0 đến 255 (28 - 1)
Biểu diễn
nhị phân
00000000
00000001
00000010
00000011
00000100
...
11111110
11111111
.c
Chúý:
co
ng
11111111
an
+ 00000001
g
cu
u
du
on
có nhớrangồi
(Carryout)
th
1 00000000
255+1=0???
dovượtrakhỏidảibiểudiễn
2017
Giá trị
thập phân
0
1
2
3
4
254
255
Kiến trúc máy tính
CuuDuongThanCong.com
141
/>
NKK-HUST
Trục số học với n = 8 bit
om
Trục số học:
255
co
ng
.c
0 1 2 3
255 0
Trục số học máy tính:
2
3
cu
u
du
on
g
th
an
254
1
2017
Kiến trúc máy tính
CuuDuongThanCong.com
142
/>
NKK-HUST
Với n = 16 bit, 32 bit, 64 bit
n
n
.c
ng
co
= 255
= 256
= 65535
n
n
cu
u
du
n
an
n
= 0
th
n
0000 0000 0000 0000
...
0000 0000 1111 1111
0000 0001 0000 0000
...
1111 1111 1111 1111
g
n
om
n= 16 bit: dải biểu diễn từ 0 đến 65535 (216 - 1)
on
n
n= 32 bit: dải biểu diễn từ 0 đến 232 - 1
n= 64 bit: dải biểu diễn từ 0 đến 264 - 1
2017
Kiến trúc máy tính
CuuDuongThanCong.com
143
/>
NKK-HUST
2. Biểu diễn số nguyên có dấu
.c
ng
Định nghĩa: Cho một số nhị phân A
được biểu diễn bằng n bit, ta có:
Số bù một của A = (2n-1) - A
n
Số bù hai của A
= 2n - A
du
on
g
th
n
Số bù hai của A = (Số bù một của A) +1
cu
u
n
an
co
n
om
Số bù một và Số bù hai
2017
Kiến trúc máy tính
CuuDuongThanCong.com
144
/>
NKK-HUST
Ví dụ
- 0010 0101
(A)
an
1101 1010
(28 - 1)
ng
1111 1111
.c
Số bù một của A được tính như sau:
co
n
om
Với n = 8 bit, cho A = 0010 0101
g
th
à đảo các bit của A
Số bù hai của A được tính như sau:
on
n
cu
u
du
1 0000 0000
- 0010 0101
(28)
(A)
1101 1011
à thực hiện khó khăn
2017
Kiến trúc máy tính
CuuDuongThanCong.com
145
/>
NKK-HUST
Quy tắc tìm Số bù một và Số bù hai
n
om
0010 0101
+ 1101 1011
1 0000 0000 = 0
(bỏ qua bit nhớ ra ngoài)
à Số bù hai của A = -A
cu
u
A
Số bù hai của A
ng
.c
Nhận xét:
=
0010 0101
1101 1010
+
1
1101 1011
co
Số bù hai của A
an
n
=
=
th
n
Cho
A
Số bù một của A
n
g
n
on
n
Số bù một của A = đảo giá trị các bit của A
(Số bù hai của A) = (Số bù một của A) + 1
Ví dụ:
du
n
2017
=
=
Kiến trúc máy tính
CuuDuongThanCong.com
146
/>
NKK-HUST
Biểu diễn số nguyên có dấu theo mã bù hai
ng
.c
om
Nguyên tắc tổng quát: Dùng n bit biểu diễn số
nguyên có dấu A:
an
co
an−1an−2 ... a2 a1a0
th
Với A là số dương: bit an-1 = 0, các bit còn lại
biểu diễn độ lớn như số không dấu
Với A là số âm: được biểu diễn bởi số bù hai
của số dương tương ứng, vì vậy bit an-1 = 1
cu
u
n
du
on
g
n
2017
Kiến trúc máy tính
CuuDuongThanCong.com
147
/>
NKK-HUST
Ví dụ
Biểu diễn các số ngun có dấu sau đây bằng
8-bit:
A = + 58 ; B = - 80
Giải:
A
= + 58
= 0011 1010
= - 80
Ta có: + 80
Số bù một
g
B
th
an
co
ng
.c
om
n
Vậy: B = - 80
= 1011 0000
cu
u
du
on
Số bù hai
= 0101 0000
= 1010 1111
+
1
= 1011 0000
2017
Kiến trúc máy tính
CuuDuongThanCong.com
148
/>
NKK-HUST
Xác định giá trị của số dương
om
Dạng tổng quát của số dương:
.c
n
an
Giá trị của số dương:
th
n
co
ng
0 an-2 ... a2 a1 a0
g
n−2
cu
u
du
on
A = ∑ ai 2
n
i
i=0
Dải biểu diễn cho số dương: [0, +(2n-1 - 1)]
2017
Kiến trúc máy tính
CuuDuongThanCong.com
149
/>
NKK-HUST
Dạng tổng quát của số âm:
.c
n
om
Xác định giá trị của số âm
an
Giá trị của số âm:
g
th
n
co
ng
1an−2 ... a2 a1a0
cu
u
du
on
A = −2
n
n−1
n−2
+ ∑ ai 2
i
Chứng minh?
i=0
Dải biểu diễn cho số âm: [- 2n-1, -1]
2017
Kiến trúc máy tính
CuuDuongThanCong.com
150
/>
NKK-HUST
Công thức xác định giá trị số âm
.c
om
! = 1!!!!! !!!!! !… !!! !!! !!! !
co
ng
−! = 0!!!!! !!!!! … !! !!! !!! + 1!
!!!
g
th
an
= 11 … 111 − !!!!! !!!!! !… !!! !!! !!! + 1!
!! 2! + 1!
du
on
= (2!!! − 1) −
cu
u
!!!
!−2
!−1
! = −2
!
!! 2 !
+!
!=0
2017
Kiến trúc máy tính
CuuDuongThanCong.com
151
/>
NKK-HUST
Cơng thức tổng qt cho số ngun có dấu
om
Dạng tổng quát của số nguyên có dấu A:
.c
n
an
Giá trị của A được xác định như sau:
th
n
co
ng
an-1an-2 ... a2 a1a0
n
+ ∑ ai 2
i
i=0
cu
u
du
on
g
A = −an−1 2
n−1
n−2
Dải biểu diễn: [-(2n-1), +(2n-1-1)]
2017
Kiến trúc máy tính
CuuDuongThanCong.com
152
/>
NKK-HUST
Ví dụ
om
Hãy xác định giá trị của các số nguyên có dấu được
biểu diễn theo mã bù hai với 8-bit như dưới đây:
Q = 1101 1011
on
du
P = 0110 0010 = 26 + 25 + 21 = 64 + 32 + 2 = +98
Q = 1101 1011 = -27 + 26 + 24 + 23 + 21 + 20
= -128 + 64 + 16 + 8 + 2 + 1 = -37
cu
u
n
g
Giải:
n
co
n
an
P = 0110 0010
th
n
ng
.c
n
2017
Kiến trúc máy tính
CuuDuongThanCong.com
153
/>
NKK-HUST
Với n = 8 bit
00000000
+1
00000001
+2
00000010
om
0
an
co
ng
-128 đến +127
Chỉ có một giá trị 0
Khơng biểu diễn cho giá trị
+128
g
th
§
§
§
Biểu diễn
bù hai
.c
§ Biểu diễn được các giá trị
từ -27 đến +27-1
Giá trị
thập phân
cu
u
du
on
Chú ý:
+127 + 1 = -128
(-128)+(-1) = +127
có tràn xảy ra (Overflow)
(do vượt ra khỏi dải biểu diễn)
2017
...
+126
01111110
+127
01111111
-128
10000000
-127
10000001
...
-2
1111 1110
-1
11111111
Kiến trúc máy tính
CuuDuongThanCong.com
154
/>
NKK-HUST
Trục số học số nguyên có dấu với n = 8 bit
om
Trục số học:
-128
+127
an
Trục số học máy tính:
-1
0
+1
-2
+2
-3
+3
cu
u
du
on
g
th
n
co
ng
-2 -1 0 1 2
.c
n
-128
2017
+127
Kiến trúc máy tính
CuuDuongThanCong.com
155
/>
NKK-HUST
Với n = 16 bit, 32 bit, 64 bit
n
n
n
n
n
n
.c
0
+1
ng
co
an
th
n
g
n
on
n
0000 0000 0000 0000 =
0000 0000 0000 0001 =
...
0111 1111 1111 1111 =
1000 0000 0000 0000 =
1000 0000 0000 0001 =
...
1111 1111 1111 1111 =
du
n
om
Với n = 16bit: biểu diễn từ -215 đến 215-1
cu
u
n
+32767 (215 - 1)
-32768 (-215)
-32767
-1
Với n = 32bit: biểu diễn từ -231 đến 231-1
Với n = 64bit: biểu diễn từ -263 đến 263-1
2017
Kiến trúc máy tính
CuuDuongThanCong.com
156
/>
NKK-HUST
Mở rộng bit cho số nguyên
Mở rộng theo số không dấu (Zero-extended):
thêm các bit 0 vào bên trái
n
ng
Mở rộng theo số có dấu (Sign-extended):
Số dương:
co
n
.c
om
n
0001 0011
th
an
+19 =
(16bit)
on
g
+19 = 0000 0000 0001 0011
(8bit)
Số âm:
cu
u
n
du
à thêm các bit 0 vào bên trái
- 19 =
1110 1101
- 19 = 1111 1111 1110 1101
(8bit)
(16bit)
à thêm các bit 1 vào bên trái
2017
Kiến trúc máy tính
CuuDuongThanCong.com
157
/>
NKK-HUST
4.2. Thực hiện phép cộng/trừ với số nguyên
ng
.c
om
1. Phép cộng số nguyên không dấu
Bộ cộng n-bit
X
th
an
n bit
co
Y
Cin
g
Cout
n bit
cu
u
du
on
Bộ cộng n-bit
n bit
S
2017
Kiến trúc máy tính
CuuDuongThanCong.com
158
/>