Kody liczbowe
i działania na liczbach binarnych
Dariusz Chaberski
Kody liczbowe
§
dwójkowy kod naturalny
+ reprezentacja
a
n
−
3
a
1
a
0
a
−
1
a
−
2
a
−
3
a
−
m
a
1
−
m
n
m
a
n
−
1
a
n
−
2
A:
L(A) =
n−1
X
i=−m
2
i
L (a
i
)
+ przykład 1
A = 10011010
L(A) = 0 × 2
0
+ 1 × 2
1
+ 0 × 2
2
+ 1 × 2
3
+ 1 × 2
4
+ 0 × 2
5
+ 0 × 2
6
+ 1 × 2
7
= 154
+ przykład 2
A = 1001.1010
L(A) = 0 × 2
−4
+ 1 × 2
−3
+ 0 × 2
−2
+ 1 × 2
−1
+ 1 × 2
0
+ 0 × 2
1
+ 0 × 2
2
+ 1 × 2
3
= 9.625
2
§
+ wartość największa
L
max
(A) = 2
n
− 1 + 1 − 2
−m
= 2
n
− 2
−m
= 2
n
(1 − 2
−m−n
)
+ wartość najmniejsza większa od zera
L
min>0
(A) = 2
−m
3
§
zapis liczb dwójkowych ze znakiem
+
kodowanie znak-moduł (ZM)
3 reprezentacja
a
0
a
−
1
a
−
2
a
−
3
a
−
m
a
1
−
m
n − 1
m
A
: a
n
−
1
a
n
−
2
a
n
−
3
a
n
−
4
a
1
L(A) = (−1)
L(a
n−1
)
n−2
X
i=−m
2
i
L (a
i
)
3 wartość największa
L
max
(A) = 2
n−1
− 1 + 1 − 2
−m
= 2
n−1
− 2
−m
3 wartość najmniejsza
L
min
(A) = −(2
n−1
− 2
−m
)
4
§
+
kodowanie znak-uzupełnienie do 1 (ZU1)
3 reprezentacja
a
0
a
−
1
a
−
2
a
−
3
a
−
m
a
1
−
m
n − 1
m
A
: a
n
−
1
a
n
−
2
a
n
−
3
a
n
−
4
a
1
−L(A) = L(A)
3 wartość największa
L
max
(A) = 2
n−1
− 2
−m
3 wartość najmniejsza
L
min
(A) = −(2
n−1
− 2
−m
)
5
§
+
kodowanie znak-uzupełnienie do 2 (ZU2)
3 reprezentacja
a
0
a
−
1
a
−
2
a
−
3
a
−
m
a
1
−
m
n − 1
m
A
: a
n
−
1
a
n
−
2
a
n
−
3
a
n
−
4
a
1
−L(A) = L(A + L
−1
(2
−m
))
3 wartość największa
L
max
(A) = 2
n−1
− 2
−m
3 wartość najmniejsza
L
min
(A) = −(2
n−1
− 1 + 1 − 2
−m
+ 2
−m
) = −2
n−1
6
§
liczby dwójkowe zmiennoprzecinkowe
+ zapis zmiennopozycyjny (ogólnie)
a
0
a
−
1
a
−
2
a
−
3
a
−
m
a
1
−
m
n
m
a
1
a
n
−
1
a
n
−
2
a
n
−
3
cecha - wykładnik
mantysa
A
:
a
n
znak
C = A[n − 1, 0]
M = A[−1, −m]
S = A[n]
E = 2
n−1
− 1
L(A) = (−1)
L(S)
L(M) × 2
L(C)−E
2
n
− 1 L(C) 0
1 ¬ L(M) < 2, normalizacja
L(S) = 0, 1
7
§
+ float (32 bity) - IEEE-754
A:
S
C
7
C
6
C
2
C
1
C
0
M
22
M
21
M
2
M
1
M
0
E = 127 = 0x7F,
M = 1.M
22
M
21
. . . M
2
M
1
M
0
+ double (64 bity) - IEEE-754
A:
S
C
2
C
1
C
0
M
2
M
1
M
0
C
10
C
9
M
51
M
50
E = 1023 = 0x3F F,
M = 1.M
51
M
50
. . . M
2
M
1
M
0
+ long double (80 bitów) - x87 (koprocesor)
A:
S
C
2
C
1
C
0
1
C
14
C
13
M
0
M
1
M
2
M
62
M
61
E = 16383 = 0x3F F F,
M = 1.M
62
M
61
. . . M
2
M
1
M
0
8
§
+ wartość największa
L
max
(A) = L
max
(M) × 2
L
max
(C)−E
+ wartość najmniejsza
L
min
(A) = −L
max
(M) × 2
L
max
(C)−E
+ wartość największa mniejsza od zera
L
max<0
(A) = −L
min>0
(M) × 2
L
min
(C)−E
+ wartość najmniejsza większa od zera
L
min>0
(A) = L
min>0
(M) × 2
L
min
(C)−E
9
§
+ przykład 1 , E = 127 (float)
0
0
1
1
0
1
0
0
0
1
1
1
0
1
1
0
1
1
1
1
0
1
1
1
1
0
1
0
1
1
A:
0
1
L(C) − E = 104 − 127 = −23
L(M) = L(1.11101101111010111101011) =
1 +
L(11101101111010111101011)
2
23
' 1.9294
L(A) = (−1)
0
L(M) × 2
−23
' 2.3 × 10
−7
10
§
+ wartości specjalne
typ
znak
cecha
mantysa
NaN
0, 1
111 . . . 111
M
n−1
M
n−2
M
n−3
. . . M
2
M
1
M
0
, L(M ) 6= 0
QNaN
0, 1
111 . . . 111
1M
n−2
M
n−3
. . . M
2
M
1
M
0
SNaN
0, 1
111 . . . 111
0M
n−2
M
n−3
. . . M
2
M
1
M
0
, L(M ) 6= 0
± Zero
0/1
000 . . . 000
000 . . . 000
± Nieskończoność
0/1
111 . . . 111
000 . . . 000
3 NaN - Not-a-Number - wartość, która nie reprezentuje liczby
3 SNaN - Significant-NaN - w momencie ustalania wartości generowane jest przerwanie sprzę-
towe wewnętrzne (wyjątek)
3 QNaN - Quiet-NaN
+ liczba zdenormalizowana - występuje w przypadku niedomiaru, np
0.M
62
M
61
. . . M
2
M
1
M
0
11
§
kod BCD (ang. Binary Coded Decimal)
+ NBCD (ang. Natural BCD) wagowy (wagi dla poszczególnych bitów 8, 4, 2, 1)
A: a
n
−
1
,
3
a
n
−
1
,
2
a
n
−
1
,
1
a
n
−
1
,
0
A
1
A
0
a
0
,
3
a
0
,
2
a
0
,
1
a
0
,
0
a
1
,
0
a
1
,
1
a
1
,
2
a
1
,
3
A
n
−
1
L(A) =
n−1
X
i=0
10
i
L(A
i
)
L(A
i
) =
3
X
k=0
2
k
L (a
i,k
)
0 ¬ L(A
i
) ¬ 9
12
Działania na liczbach binarnych
§
znaczniki
+ C - Carry - przeniesienie lub pożyczka
+ Z - Zero - wartość zerowa
+ N - Negative - wartość ujemna (kopia najstarszego bitu)
+ V - U2 oVerflow - przepełnienie (nadmiar w kodzie U2)
+ S - Sign - znak, S=V⊕N, np 0x80 + 0x80 oraz 0xff + 0xff ustawiają S
+ H - Half carry - przeniesienie połówkowe (BCD)
13
§
działania arytmetyczne
+ suma
1
1
0
1
1
1
1
1
0
0
1
0
1
0
1
0
0
0
0
0
1
0
0
1
1
0
A:
A+B:
B:
1
C:
Z:
0
N:
V:
0
0
0
0
0
0
0
S:
0
H:
14
§
+ różnica (sposób tradycyjny)
1
1
0
1
1
1
1
0
1
1
1
0
1
0
0
0
1
1
1
0
1
1
1
1
A-B:
A:
B:
1
C:
Z:
0
N:
V:
S:
H:
1
0
1
1
15
§
+ różnica (z wykorzystaniem własności −B = B + L
−1
(2
−m
), gdzie m = 4)
A = 11010111
B = 11101000
1
1
0
1
1
1
1
0
0
0
0
1
0
1
1
1
1
1
1
1
0
1
1
1
1
A-B:
A:
B:
C:
0
0
Z:
1
0
1
0
H:
N:
V:
S:
16
§
+ kolejne przykłady (znaczniki C i V)
A
B
†
A†B
znaczniki
X
U2
NB
X
U2
NB
X
U2
NB
C
V
0x01
1
1
0x01
1
1
+
0x02
2
2
0
0
0x3c
60
60
0x3c
60
60
+
0x78
120
120
0
0
0x41
65
65
0x41
65
65
+
0x82
-126
130
0
1
0x64
100
100
0x64
100
100
+
0xc8
-56
200
0
1
0x64
100
100
0x82
-126
130
+
0xe6
-26
230
0
0
0x64
100
100
0xa0
-96
160
+
0x04
4
4
1
0
0x80
-128
128
0x80
-128
128
+
0x00
0
0
1
1
0x80
-128
128
0x7f
127
127
+
0xff
-1
255
0
0
0x00
0
0
0xff
-1
255
-
0x01
1
1
1
0
0x80
-128
128
0x77
119
119
-
0x09
9
9
0
1
0x80
-128
128
0x81
-127
129
-
0xff
-1
255
1
0
17
§
+ kolejne przykłady (znaczniki S i N)
A
B
†
A†B
znaczniki
X
U2
NB
X
U2
NB
X
U2
NB
S
N
0xff
-1
255
0x00
0
0
+
0xff
-1
255
1
1
0x80
-128
128
0x80
-128
128
+
0x00
0
0
1
0
0x80
-128
128
0xff
-1
255
+
0x7f
127
127
1
0
0x7f
127
127
0x7f
127
127
+
0xfe
-2
254
0
1
0x00
0
0
0x01
1
1
-
0xff
-1
255
1
1
0x10
16
16
0x90
-112
144
-
0x80
-128
128
0
1
0x80
-128
128
0x7f
127
127
-
0x01
1
1
1
0
18
§
+ suma dwóch liczb 2n-bitowych z wykorzystaniem n-bitowego arytmometru
A = A
H
◦ A
L
B = B
H
◦ B
L
◦ C
IN
C ◦ (A + B)
L
= A
L
+ B
L
+ C
IN
C
OU T
◦ (A + B)
H
= C + A
H
+ B
H
C
OU T
◦ (A + B) = ((C + A
H
+ B
H
) << n) + (A + B)
L
19
§
+ iloczyn
A:
1
1
0
1
1
1
1
0
1
1
0
1
1
1
1
1
1
0
0
B:
1
0
1
1
1
1
0
1
1
0
1
0
1
1
0
1
1
1
0
0
0
A×B:
1
1
0
0
1
1
0
1
1
1
1
1
0
1
1
0
C:
Z:
0
20
§
+ iloczyn dwóch liczb 2n-bitowych z wykorzystaniem n-bitowego arytmometru
A = A
H
◦ A
L
B = B
H
◦ B
L
AB = ((A
H
B
H
) << 2n) + ((A
L
B
H
+ A
H
B
L
) << n) + A
L
B
L
21
§
+ iloraz
A
:
1
1
0
1
1
1
1
0
B
:
1
1
0
0
0
0
0
1
1
1
0
0
1
1
0
0
0
0
1
1
0
1
1
1
0
0
1
1
1
1
1
1
0
0
0
0
1
1
A
% B:
C
:
0
Z
:
0
22
§
+ iloczyn liczb zmiennoprzecinkowych
A = A
S
◦ A
C
◦ A
M
,
B = B
S
◦ B
C
◦ B
M
,
AB = (A
S
◦ A
C
◦ A
M
) (B
S
◦ B
C
◦ B
M
) = (−1)
L(A
S
)+L(B
S
)
(A
C
+ B
C
) ◦ (A
M
B
M
) .
+ iloraz liczb zmiennoprzecinkowych
A = A
S
◦ A
C
◦ A
M
,
B = B
S
◦ B
C
◦ B
M
,
A/B = (A
S
◦ A
C
◦ A
M
) / (B
S
◦ B
C
◦ B
M
) = (−1)
L(A
S
)+L(B
S
)
(A
C
− B
C
) ◦ (A
M
/B
M
) .
23
§
+ suma liczb zmiennoprzecinkowych
A = A
S
◦ A
C
◦ A
M
,
B = B
S
◦ B
C
◦ B
M
,
A+B = (A
S
◦ A
C
◦ A
M
)+(B
S
◦ B
C
◦ B
M
) =
(−1)
L(A
S
)
A
M
+ (−1)
L(B
S
)
B
M
2
L(B
C
)−L(A
C
)
◦A
C
.
+ różnica liczb zmiennoprzecinkowych
A = A
S
◦ A
C
◦ A
M
,
B = B
S
◦ B
C
◦ B
M
,
A−B = (A
S
◦ A
C
◦ A
M
)−(B
S
◦ B
C
◦ B
M
) =
(−1)
L(A
S
)
A
M
− (−1)
L(B
S
)
B
M
2
L(B
C
)−L(A
C
)
◦A
C
.
24
§
+ suma liczb w kodzie BCD
A
:
B
:
(A + B)
BCD
:
(A + B)
NB
:
0
0
0
1
0
0
1
0
0
1
1
1
1
0
0
1
0
0
0
0
0
1
1
0
1
0
1
0
0
0
1
1
0
0
0
0
C
:
0
0
0
0
0
0
1
1
0
1
1
0
1
25
§
operacje logiczne
+ AND - ∧, &; OR - ∨, |; XOR - ⊕, ˆ; NOT - A,˜
B:
1
1
0
1
1
1
1
0
0
0
0
1
1
1
0
0
A:
A ∧ B:
A ∨ B:
A:
0
0
0
1
0
1
0
1
1
1
0
1
0
1
1
1
A ⊕ B:
1
1
0
0
0
0
0
1
1
1
1
0
1
0
1
0
26