7. praktikum - Bitt-tehted (itv0020)

Allikas: Lambda
Süsteemprogrammeerimine keeles C

Praktikumid

Laborid

Selles praktikumis püüame salvestada infot hästi kompaktselt

Ülesanne

Eesmärgiks on kirjutada kaks programmi: ask ja show.

Ask

  • Programm küsib kasutajalt 8 küsimust, mida on võimalik vastata "jah/ei".
  • Seejärel salvestab vastused ühebaidilisse faili.

Show

  • Programm näitab programmi ask poolt faili salvestatud vastused ekraanile.

Vihjeid

  • Küsimuste stringid on mõttekas salvestada eraldi .h failis ja kaasata #include abil.
  • Vastuste salvestamisel peaks kasutama bitimaski või bitinihet.
  • Kasutage bithaaval toimuvate (bitwise) tehetes kasutatavates andmetüüpides unsigned võtmesõna. (Miks see oluline on?)
  • Ühebaidiste andmete väljakirjutamiseks ja lugemisest saate kasutada fputc() ja fgetc() funktsiooni
  • Reapuhvri tõttu on vastus "y" tegelikult "y" ja reavahetus, arvestage.
  • Vastuseid hoidva faili sisu vaatamiseks on võib-olla abi programmist hexdump
  • Binaarmaskide väljamõtlemisel ei pea te baidi 256 väärtust pähe õppima. Piisab nendest 16st:
0 - 0000
1 - 0001
2 - 0010
3 - 0011
4 - 0100
5 - 0101
6 - 0110
7 - 0111
8 - 1000
9 - 1001
a - 1010
b - 1011
c - 1100
d - 1101
e - 1110
f - 1111

Selle tabeli kasutamisel on võimalik mõista et kui hexdump ütleb, et baidi väärtus on F5, järeldub sellest et baidi sisuks on 11110101 . Lihtne!

Väljakutse

Väljakutse korral võite proovida sama programmi implementeerida teisiti: kasutades bit-fields nimelist bitivälja struktuuris. (Loeng 7 algus)

struct test {
 unsigned int esimene:1;
 unsigned int teine:1;
};