Carti de referinta:

introducere

  • Proiectarea programului: P Juliff
  • IBM Microcomputer Assembly Language: J Godfrey
  • Craftul programatorilor: R Weiland
  • Stocarea datelor într-un computer: CIT
  • Proiectare software microcomputer: S Campbell

STRUCTURI DE DATE
La fel cum este important să învățați să proiectați programe, la fel este și înțelegerea formatului corect și a utilizării datelor. Toate programele folosesc o formă de date. Pentru a proiecta programe care funcționează corect, va fi necesară o bună înțelegere a modului în care sunt structurate datele.

Acest modul vă prezintă diferitele forme de date utilizate de programe. Vom investiga modul în care datele sunt stocate, accesate și utilizarea lor tipică în cadrul programelor.

Un computer stochează informații în format binar. Binarul este un sistem numeric care utilizează BITS pentru a stoca date.

BITS
Un bit este cel mai mic element de informație utilizat de un computer. Un pic conține UNA dintre DOUĂ valori posibile,

Un bit care este OFF este, de asemenea, considerat ca fiind FALS sau NU SETAT; un bit care este PORNIT este, de asemenea, considerat a fi TRUE sau SET.

Deoarece un singur bit poate stoca doar două valori, biții sunt combinați împreună în unități mari pentru a menține o gamă mai mare de valori.

CIUGULI
Un ciugulit este un grup de PATRU biți. Aceasta oferă un număr maxim de 16 valori diferite posibile.

Când este vorba despre grupuri de biți, este util să se determine care bit al grupului are cea mai mică valoare și care bit are cea mai mare sau cea mai mare valoare.

Bitul cel mai puțin semnificativ ȘI Bitul cel mai semnificativ
Acesta este considerat bitul 0 și este întotdeauna desenat la extrema dreaptă. Cel mai semnificativ bit este întotdeauna afișat în extrema stângă și este bitul cu cea mai mare valoare.

Diagrama de mai jos prezintă un NIBBLE și fiecare poziție de biți și valoarea greutății zecimale (pentru mai multe informații, consultați modulul pe sisteme numerice).

Să luăm în considerare un exemplu de conversie a valorilor binare în zecimal.

Pentru mai multe exemple, consultați modulul privind sistemele numerice.

BYTES
Octetii sunt o grupare de 8 biți. Aceasta cuprinde DOUĂ ronțăituri, așa cum se arată mai jos.

Octetii sunt adesea folosiți pentru a stoca CARACTERE. Ele pot fi, de asemenea, utilizate pentru a stoca valori numerice,

Zecimal codat binar [BCD]
Cifrele zecimale ale codului binar (0-9) sunt reprezentate folosind PATRU biți. Combinațiile valide de biți și valorile lor respective sunt

Valoare binară Cifră
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9

Combinațiile binare 1010-1111 sunt nevalide și nu sunt utilizate.

Dacă computerul stochează o cifră BCD pe octet, se numește BCD normal. Ciugulitul neutilizat poate fi fie toți 0, fie toți 1.

Dacă sunt stocate două cifre BCD pe octet, se numește BCD ambalat. Acest lucru se întâmplă în transmisia de date în care numerele sunt transmise printr-o legătură de comunicații. BCD pachet reduce cantitatea de timp petrecut transmiterea numerelor, deoarece fiecare octet de date transmis duce la trimiterea a două cifre BCD.

Luați în considerare stocarea cifrelor 56 în format BCD ambalat.

Ciugulitul SUPERIOR deține valoarea 5, în timp ce ciugulitul INFERIOR deține valoarea 6.

Variabile de stare și booleene
Variabilele BOOLEAN folosesc un singur bit pentru a-și păstra valoarea, deci pot presupune doar una din cele două stări posibile. Acesta este fie 0 (considerat FALS), fie 1 (considerat ADEVĂRAT).

Computerul gestionează fiecare variabilă booleană ca un singur bit. Dacă bitul este ADEVĂRAT, atunci are valoarea 1. Dacă bitul este FALS, atunci are valoarea 0.

Când un grup de biți sunt grupați împreună pentru a forma un interval limitat de valori, acest lucru este cunoscut sub numele de STARE variabil.

Luați în considerare cazul unui program în care trebuie să ținem evidența numărului de minute pentru care o linie telefonică este ocupată (în intervalul limitat de la 0 la 60). Acest lucru nu necesită utilizarea unui întreg întreg, astfel încât unele limbaje de programare vă permit să specificați numărul de biți folosiți pentru alocarea variabilelor cu intervale limitate.

Avantajul acestei abordări este că spațiul de stocare al variabilelor de stare poate fi combinat împreună într-un singur 16 sau 32 de biți, rezultând o economie de spațiu.

Luați în considerare unde un computer alocă 16 biți de stocare pentru fiecare variabilă de stare. Dacă am avea trei variabile de stare, spațiul consumat ar fi de 48 de biți. DAR, dacă toate variabilele de stare ar putea fi combinate și încorporate într-un singur 16 biți de stocare, am putea economisi 32 de biți de memorie. Acest lucru este foarte important în sistemele în timp real, unde spațiul de memorie este extrem de important.

Luați în considerare următoarea diagramă, care ilustrează împachetarea variabilelor booleene și de stare împreună într-un singur octet.

Codul standard american pentru schimbul de informații
ASCII este un cod de computer care folosește 128 de combinații diferite de codificare a unui grup de șapte biți (27 = 128) pentru a reprezenta,

Un computer stochează de obicei informații în opt biți. Cel de-al optulea bit nu este utilizat în ASCII, deci este în mod normal setat la 0. Unele sisteme pot utiliza opt bit pentru a implementa grafică sau simboluri de limbă diferite, adică caractere grecești.

Codurile de control sunt utilizate în comunicații și imprimante. Acestea pot fi generate de la o tastatură ASCII ținând apăsat butonul CTRL (control) și apăsând o altă tastă (de la A la Z, plus

CARACTERE
Caracterele sunt simboluri nenumerice utilizate pentru a transmite limbajul și semnificația. În engleză, acestea sunt combinate cu alte caractere pentru a forma cuvinte. Exemple de personaje sunt;

Un sistem computerizat stochează în mod normal caractere folosind codul ASCII. Fiecare caracter este stocat folosind opt biți de informații, oferind un număr total de 256 de caractere diferite (2 ** 8 = 256).

În limbajul înalt Pascal, caracterele sunt definite și utilizate după cum urmează,

Variabilele utilizate într-un program Pascal sunt declarate după cuvântul cheie var. Exemplul de mai sus declară variabila plus_simbol pentru a fi un tip de caracter, astfel sunt alocați opt biți de memorie pentru stocarea valorii sale (încă nedeterminată).

În corpul principal al programului, după cuvântul cheie începe, enunțul afișat atribuie simbolul + la variabila caracter plus_simbol. Acest lucru este echivalent cu stocarea valorii ASCII 2B hexazecimale în cei opt biți de memorie alocați variabilei plus_symbol.

CORDE DE TEXT
Șirurile de text sunt o secvență de caractere (de exemplu, cuvinte sau simboluri cu mai multe caractere). Fiecare caracter este stocat unul după altul, fiecare ocupând opt biți de memorie.

Șirul de text Buna ziua ar fi stocate după cum urmează

În Turbo Pascal, șirurile de text sunt definite și utilizate după cum urmează,

Exemplul de mai sus declară variabila text_message ca un tip de șir de până la 22 de caractere (dar nu mai mult!). Opt biți de stocare a memoriei sunt alocați pentru a stoca fiecare caracter în șir (un total de 22 de octeți), cu valoarea din fiecare octet încă nedeterminată.

În corpul principal al programului, după începerea cuvântului cheie, declarația afișată atribuie mesajul Bun venit la șiruri de text la variabila șir text_message. Aceasta stochează valoarea ASCII a fiecărui caracter în fiecare octet succesiv de memorie alocat variabilei text_message.

INTEGRI
Informațiile numerice nu pot fi stocate în mod eficient utilizând formatul ASCII. Imaginați-vă că stocați numărul 123.769 folosind ASCII. Acest lucru ar consuma 6 octeți și ar fi dificil de spus dacă numărul a fost pozitiv sau negativ (deși am putea preceda cu caracterul + sau -).

Un mod mai eficient de stocare a informațiilor numerice este utilizarea unei scheme de codare diferite. Schema de codificare cea mai utilizată este prezentată mai jos,

Numerele întregi stochează numai numere întregi! Nu conțin părți fracționate. Luați în considerare exemplele de mai jos,

Bitul de semn (care este bitul 15) indică dacă numărul este pozitiv sau negativ. O logică 1 indică negativ, iar logica 0 indică pozitiv.

Numărul este convertit în binar și stocat în biții 0-14 din cei doi octeți.

La stocarea numerelor negative, numărul este stocat utilizând formatul complementului celor două.

În Pascal, numerele întregi sunt definite și utilizate după cum urmează,

Exemplul declară variabila număr întreg pentru a fi un tip întreg, deci șaisprezece biți de stocare a memoriei sunt alocați pentru a stoca valoarea acestuia (încă nedeterminată).

În corpul principal al programului, după cuvântul cheie începe, enunțul prezentat atribuie valoarea numerică 1267 variabilei întregi număr întreg. Acest lucru este echivalent cu stocarea combinației de biți 0000010011110011 în cei șaisprezece biți de memorie alocați variabilei număr întreg.

Numerele întregi semnate care utilizează 16 biți au o gamă de numere de,

Pentru a stoca valori întregi mai mari ar fi nevoie de mai mulți biți. Unele sisteme și limbaje acceptă, de asemenea, utilizarea unor numere întregi nesemnate, care sunt considerate a fi doar pozitive.

NUMERE DE PUNCT FLOTANT
Există două probleme cu numerele întregi; nu pot exprima fracții, iar intervalul numărului este limitat la numărul de biți utilizați. O modalitate eficientă de stocare a fracțiilor se numește metoda în virgulă mobilă, care implică împărțirea fracției în două părți, un exponent și o mantisă.

Exponentul reprezintă o valoare ridicată la puterea lui 2.

Mantisa reprezintă o valoare fracțională între 0 și 1.

Luați în considerare numărul

Numărul este mai întâi convertit în format

Unde n reprezintă exponentul și 0.xxxxx este mantisa.

Industria calculatoarelor a convenit asupra unui standard pentru stocarea numerelor în virgulă mobilă. Se numește standard IEEE 754 și folosește 32 de biți de memorie (pentru o precizie simplă) sau 64 de biți (pentru o precizie cu dublă precizie). Formatul unic de precizie arată,

Bitul de semn este 1 pentru o mantisă negativă și 0 pentru o mantisă pozitivă.

Exponentul folosește o prejudecată de 127.

Mantisa este stocată ca valoare binară folosind o tehnică de codificare.

Elaborarea tiparelor de biți FP
Numărul pe care îl avem este

care exprimat ca fracție la puterea lui 2 este,

NOTĂ: Continuați să împărțiți la 2 până la o fracție între 0 și 1 rezultate. Fracția este valoarea mantisă, numărul diviziunilor este valoarea exponentului.

astfel valorile noastre sunt acum,

Modelul de biți exponent este stocat folosind un exces de 127. Aceasta înseamnă că această valoare este adăugată la exponent atunci când se stochează (și se scade la eliminare).

Modelul de biți exponent de stocat este,

Deoarece mantisa este o valoare pozitivă, bitul de semn este 0.

Mantisa este puțin mai complicată de rezolvat. Fiecare bit reprezintă 2 la puterea unui număr negativ. Arată ca,

Valoarea numărului de mantisă pe care o avem este 0,78125, care în binar este

Totuși, pentru a face lucrurile și mai complicate, mantisa este normalizată, prin deplasarea tiparelor de biți spre stânga (fiecare schimbare scade una din valoarea exponentului) până când primul 1 scade.

Modelul rezultat este apoi stocat.

Mantisa devine acum

iar exponentul este ajustat pentru a deveni

Formatul final asamblat este,

Acum, putem converti următorul format de stocare înapoi într-un număr zecimal.

Acest lucru dă un număr negativ cu o valoare a exponentului de,

și o valoare mantisă a,

(1.0 provine de la bitul care a fost dezactivat atunci când mantisa a fost normalizată), astfel numărul este,

Gama numerică pentru numerele cu virgulă mobilă folosind metoda IEEE-754, folosind 32 de biți, este

În Pascal, numerele cu virgulă mobilă sunt definite și utilizate după cum urmează,

Exemplul declară variabila fp_number să fie un tip cu virgulă mobilă, astfel, treizeci și doi de biți de stocare a memoriei sunt alocați pentru a stoca valoarea sa (încă nedeterminată).

În corpul principal al programului, după cuvântul cheie începe, enunțul prezentat atribuie valoarea numerică 12.50 variabilei reale fp_number. Acest lucru este echivalent cu stocarea combinațiilor de biți 0100000101001000000000000000000000 în cei treizeci și doi de biți de memorie alocați variabilei fp_number.

Avantajele stocării numerelor în virgulă mobilă în acest fel sunt,

  • multiplicarea se realizează prin adăugarea de exponenți și a mantiselor
  • divizarea se realizează prin scăderea exponenților și a mantiselor
  • este ușor să comparați două numere pentru a vedea care este cel mai mare sau mai mic
  • intervalele de număr mare sunt stocate folosind relativ puțini biți

Dezavantajele formatului de stocare sunt,

  • erorile sunt create prin mutarea biților de mantisă
  • conversia înapoi și înainte necesită timp