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

  1. −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 ✔
  2. 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.
  3. 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

  1. 16#0275 BCD-ként = 275. Minden hexadecimális jegy egy decimális jegyet kódol: 0 2 7 5. Ugyanez a bitminta sima binárisként 629 (2×256 + 7×16 + 5) — ezért nem mindegy, melyik értelmezéssel dolgozol.
  2. 16#1A5 nem érvényes BCD, mert az A jegy a 10-es értéket kódolná: a BCD-ben minden négyes bitcsoport csak 0…9 lehet.
  3. A hiba a lebegőpontos egyenlőségvizsgálat. A REAL vé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.0 felté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

Mennyire volt hasznos ez a fejezet?

Még nincs értékelés.