A 4. fejezet („Számrendszerek és adatábrázolás") gyakorlatainak részletes megoldásai és a tudáspróba megoldókulcsa. Előbb dolgozd ki magad, csak utána ellenőrizz!
Gyakorlatok — megoldások
4.1. feladat — Átváltások
Megoldás
| # | Feladat | Eredmény | Módszer |
|---|---|---|---|
| 1 | 2#1100 1010 |
202, 16#CA |
helyiértékek összege: 128 + 64 + 8 + 2; hexához négyes bitcsoportok: 1100 = C, 1010 = A |
| 2 | 200 | 2#1100 1000, 16#C8 |
ismételt kettővel osztás, a maradékok visszafelé; vagy 200 = 128 + 64 + 8 |
| 3 | 16#3E8 |
1000, 2#0011 1110 1000 |
3×256 + 14×16 + 8; binárishoz jegyenként: 3 = 0011, E = 1110, 8 = 1000 |
| 4 | 8#175 |
125, 2#0111 1101 |
1×64 + 7×8 + 5; binárishoz jegyenként hármas csoportok: 001 111 101 |
| 5 | 2#1111 1111 1111 1111 |
WORD: 65 535, INT: −1 |
ugyanaz a bitminta, két értelmezés: előjel nélkül a maximum, előjelesen a kettes komplemens −1 |
Az 5. pont a fejezet lényege: a bitminta önmagában nem szám — a típus mondja meg, mit jelent.
4.2. feladat — Előjeles számok
Megoldás
- −100
INT-ben: - 100 =2#0000 0000 0110 0100- minden bit tagadva:2#1111 1111 1001 1011- plusz 1:2#1111 1111 1001 1100=16#FF9C- ellenőrzés: 65 536 − 100 = 65 436 =16#FF9C✔ 16#8000= −32 768. Az előjelbit 1, minden más bit 0. Ez a legkisebb ábrázolhatóINT, mert a kettes komplemensben a negatív tartomány eggyel többet fog át, mint a pozitív: −32 768 … +32 767.16#FFFB:WORD-ként 65 531,INT-ként −5 (65 536 − 65 531 = 5).
⚠ Gyakori hiba: a tagadás után elmarad a +1. Ellenőrzésül mindig érdemes visszaadni:
a szám és a negáltja összege 0000 kell legyen (túlcsordulással).
4.3. feladat — BCD és lebegőpont
Megoldás
16#0275BCD-ként = 275. Minden hexadecimális jegy egy decimális jegyet kódol:0275. Ugyanez a bitminta sima binárisként 629 (2×256 + 7×16 + 5) — ezért nem mindegy, melyik értelmezéssel dolgozol.16#1A5nem érvényes BCD, mert azAjegy a 10-es értéket kódolná: a BCD-ben minden négyes bitcsoport csak 0…9 lehet.- A hiba a lebegőpontos egyenlőségvizsgálat. A
REALvéges pontosságú: a 25 °C-nak megfelelő érték a memóriában lehet 24,999 998 vagy 25,000 004, és így az= 25.0feltétel soha nem teljesül. Javítás tűréssel:
ST
IF ABS(rHomerseklet - 25.0) < 0.1 THEN (* … *) END_IF
Vagy — szabályozási feladatnál helyesebben — sávvizsgálattal:
ST
IF rHomerseklet >= 24.5 AND rHomerseklet <= 25.5 THEN
⚠ Gyakori hiba: a tűrés helyett a mért érték kerekítése egész típusra. Ez látszólag megoldja a problémát, de eldobja a mérés felbontását — és a határon ugyanúgy ugrál.
Tudáspróba — megoldókulcs
| # | Válasz | Indoklás | Szakasz |
|---|---|---|---|
| 1 | b | 128 + 64 + 16 + 4 + 2 = 214. | 4.2 |
| 2 | b | 183 = 11 · 16 + 7 → 16#B7. |
4.2 |
| 3 | c | Egy hexadecimális jegy pontosan 4 bitet ír le (16 = 2⁴). | 4.1 |
| 4 | a | A szabvány szerinti bináris előtag a 2# (a 0b C-nyelvi szokás). |
4.3 |
| 5 | d | A WORD 16 bites, előjel nélküli: 0 … 65 535. |
4.5 |
| 6 | a | A nulla is kódot foglal, és a kettes komplemens így osztja el a tartományt. | 4.6 |
| 7 | c | Kettes komplemens = bitenkénti tagadás, majd +1. | 4.6 |
| 8 | d | 16#FFE7 = 65 511; INT-ként 65 511 − 65 536 = −25. |
4.6 |
| 9 | a | BCD-ben a 10–15 (A–F) értékű négybites csoport érvénytelen. |
4.7 |
| 10 | b | 0001 0100 1001 0010 = 16#1492 = 5266 (az 1492 a BCD-olvasat!). |
4.7 |
| 11 | c | A REAL IEEE 754 szerinti, véges pontosságú lebegőpontos típus. |
4.8 |
| 12 | d | Lebegőpontos értékeket tűrésmezővel hasonlítunk össze: ABS(a − b) < eps. |
4.8 |