PREVEDERI SPECIFICE CONSTRUCTIILOR DE BETON



Metode de codificare si stocare a informatiei folosite in tehnica de calcul


Dupa cum am aratat anterior, in binar se pot reprezenta direct numere intregi si fractionare fara semn[1]. Pentru a putea lucra cu numere cu semn precum si cu caractere alfanumerice, au fost concepute scheme de codificare a informatiei. Acestea trebuie sa raspunda unor cerinte uneori contradictorii, precum:



  • gama mare de reprezentare a valorilor numerice (numere mari)
  • precizie buna de reprezentare (multe zecimale sau o aproximare cat mai corecta a valorii numerice)
  • unicitatea reprezentarii cifrei 0
  • capacitatea de a codifica atat numare pozitive, cat si pe cele negative, cat mai simplu
  • numar-numar sa dea codificarea lui 0 direct, fara corectii suplimentare
  • operatiile aritmetice de baza sa fie cat mai apropiate de aritmetica binara
  • sa atraga atentia ca am depasit in urma unei operatii aritmetice gama de reprezentare
  • economie maxima de spatiu de memorie
  • circuitele necesare realizarii operatiunilor aritmetice de baza sa fie cat mai simple si cu o structura asemanatoare cu cele pentru operatiile logice

Nu exista o solutie unica care sa satisfaca toate aceste cerinte, si prin urmare se folosesc mai multe tipuri de codificare, adaptate pentru diverse situatii. Vom prezenta in cele ce urmeaza pe cele mai des folosite - dar atentie! mai sunt si altele!


Codificarea intregilor fara  semn

Este direct reprezentarea in binar, pe 1 octet (8 biti), 2 octeti (16 biti), 4 octeti (32 biti) sau 8 octeti (64 biti).

In baza zece, numerele pot lua valori[2]:


0 255


pe 1 octet

0 65,535


pe 2 octeti

0 4,294,967,295


pe 4 octeti

0 18,446,744,073,709,551,615


pe 8 octeti


Codificarea BCD (Binary Coded Decimal)

Porneste de la ideea de a codifica cifrele prin conversia 09 direct in binar pe opt / patru biti. De exemplu, numarul 34099 se codifica ca:


3

4

0

9

9

0011

0100

0000

1001

1001


Exista doua moduri de a codifica BCD:

despachetat - pe un octet doar primii 4 biti contin codificarea unui cifre, urmatorii 4 contin 0000 binar

impachetat (packed BCD) - pe un octet se codifica doua cifre

Se observa ca pe octet o codificare packed BCD poate reprezenta valori de la 0 la 99, in timp ce o codificare binara "standard" poate reprezenta valori de la 0 la 255. Mai mult, o buna parte din combinatiile binare posibile pe octet sunt ilegale d.p.d.v. al codificarii BCD - deci trebuiesc construite circuite speciale logice (cu multe verificari si corectii) pentru o aritmetica corecta in BCD.


Reprezentarea intregilor cu  semn

Prima idee este ca bitul cel mai din stanga sa fie 0 pentru numere pozitive, 1 pentru numere negative. Exista citeva metode de codificare:

  • cu bit de semn pus "manual"
  • complement fata de 1
  • complement fata de 2

O a doua idee este sa adunam la valoarea numarului un deplasament care sa asigure ca avem dupa codificare doar numere pozitive - codificarea in exces.


1.     Cu bit de semn in fata (0 pozitiv, 1 negativ)


Numere pozitive

Numere negative

0

0 000

-0

1 000

1

0 001

-1

1 001

2

0 010

-2

1 010

3

0 011

-3

1 011

4

0 100

-4

1 100

5

0 101

-5

1 101

6

0 110

-6

1 110

7

0 111

-7

1 111


-1

1001


-1


1001


+2

0010


-1


1001


-4

1100

+1

0001


+(-7)


1111


+7

0111


+(-2)


1010


+3

0011

-2

1010


-0

1

1000


-1

1001


+3

1

0011


-7

1111



Numarul negativ se obtine punand pe 1 bitul cel mai din stanga. Concluzii:

  • numerele negative au 1 pe bitul cel mai din stanga, cele pozitive au 0
  • avem 2 codificari pentru 0
  • trebuiesc facute corectii la suma nume­relor cu semn diferit
  • trebuiesc facute corectii la suma nume­relor negative
  • aduna corect numere pozitive
  • daca la insumarea a doua numere pozi­tive depasesc gama de repre­zentare,  obtinem ca rezultat codificarea unui numar negativ, fara avertisment
  • daca la insumarea a doua numere negative depasesc gama de repre­zentare,  obtinem ca rezultat codificarea unui numar negativ, cu transport.


2.     Complement fata de 1


Numere pozitive

Numere negative

0

0 000

-0

1 111

1

0 001

-1

1 110

2

0 010

-2

1 101

3

0 011

-3

1 100

4

0 100

-4

1 011

5

0 101

-5

1 010

6

0 110

-6

1 001

7

0 111

-7

1 000


-1

1110


-1


1110


+2

0010


-1


1110


-4

1011

+1

0001


+(-7)


1000


+7

0111


+(-2)


1101


+3

0011

-0

1111


+6

1

0110


-6

1001


-4

1

1011


-1

1110


Numarul negativ se obtine prin negarea bitilor din codificarea numarului pozitiv.

Concluzii:

  • avem 2 codificari pentru 0
  • numerele negative au 1 pe bitul cel mai din stanga, cele pozitive au 0
  • trebuie facute corectii la suma numerelor negative (adunat 1)
  • aduna corect numere pozitive
  • daca depasesc gama de reprezentare la insumarea a doua numere pozitive obtinem ca rezultat codificarea unui numar negativ , fara avertisment

3.     Complement fata de 2


Numere pozitive

Numere negative

0

0 000

-0

0 000

1

0 001

-1

1 111

2

0 010

-2

1 110

3

0 011

-3

1 101

4

0 100

-4

1 100

5

0 101

-5

1 011

6

0 110

-6

1 010

7

0 111

-7

1 001



-8

1 000


-1


1111


-2


1110


+2

0010


-1


1111


-4

1100

+1


0001


+(-7)


1001


+7

0111


+(-2)


1110


+3

0011

0

1

0000


+7

1

0111


-7

1001


-3

1

1101


-1

1111


Numarul negativ se obtine prin negarea bitilor din codificarea numarului pozitiv, la care se aduna 1


O alta metoda de obtinere a complementului fata de 2 se face prin urmatoarea succesiunea de pasi:

a)     pentru reprezentarea pe n biti se calculeaza 2n

b)     se scade numarul care trebuie reprezentat din valoarea obtinta la pasul a)

c)     se converteste in binar rezultatul de la pasul b)



Concluzii:

  • avem 1 codificare pentru 0
  • numerele negative au 1 pe bitul cel mai din stanga, cele pozitive au 0
  • aduna corect numere pozitive si negative
  • daca depasesc gama de reprezentare la insumarea a doua numere pozitive obtinem ca rezultat codificarea unui numar negativ , fara avertisment
  • daca la insumarea a doua numere negative depasesc gama de repre­zentare,  obtinem ca rezultat codificarea unui numar pozitiv, cu transport.
  • valoarea maxima negativa codificat este mai mare cu 1 (in valoare absoluta) decat cea pozitiva

4.     Prin adunarea unui deplasament pozitiv (reprezentare in exces)


Numere negative

Codificare - exces 7

Numere pozitive

Codificare - exces 7

-7

00 00

+0

01 11

-6

00 01

+1

10 00

-5

00 10

+2

10 01

-4

00 11

+3

10 10

-3

01 00

+4

10 11

-2

01 01

+5

11 00

-1

01 10

+6

11 01

-0

01 11

+7

11 10



+8

11 11


Numarul negativ cel mai mic este codificat 00..00 si este in modul valoarea "exces". Secventa de numere se construieste adunand binar 1 la numarul anterior. Concluzii:

  • avem 1 codificare pentru 0
  • numerele negative au 0 pe bitul cel mai din stanga, cele pozitive au 1
  • nu aduna corect numere pozitive si negative - trebuie scazuta binar codificarea lui 0 pentru a obtinea codul rezultatului corect
  • daca depasesc gama de reprezentare la insumarea a doua numere pozitive obtinem ca rezultat codificarea unui numar negativ, cu transport
  • daca la insumarea a doua numere negative depasesc gama de repre­zentare,  obtinem ca rezultat codificarea unui numar negativ, fara avertisment.
  • valoarea maxima negativa codificata este mai mica cu 1 (in valoare absoluta) decat cea pozitiva

Prezentam mai jos rezultatele operatilor de adunare pe numere codificate "exces 7".


-1

0110


-2

0101


+2


1001


-1

0110


-4

0011

+1

1000


+(-7)

0000


+7


1110


+(-2)

0101


+3

1010

+7

1110


-2

0101


-7

1

0111


+4

1011


+6

1101


Pentru corectie, scadem binar din rezultatul de mai sus 0111 (codificarea valorii 0)



1110




0101




0111



1011



1101

-0

0111


-0


1111


-0


0111


-0

0111


-0

0111

0

0111


+3

1

0110


-7


0000


-3

0100


-1

0110






Reprezentarea caracterelor alfanumerice - codul ASCII



ASCII stands for American Standard Code for Information Interchange. Computers can only understand numbers, so an ASCII code is the numerical representation of a character such as 'a' or '@' or an action of some sort. ASCII was developed a long time ago and now the non-printing characters are rarely used for their original purpose. Below is the ASCII character table and this includes descriptions of the first 32 non-printing characters. ASCII was actually designed for use with teletypes and so the descriptions are somewhat obscure. If someone says they want your CV however in ASCII format, all this means is they want 'plain' text with no formatting such as tabs, bold or underscoring - the raw format that any computer can understand. This is usually so they can easily import the file into their own applications without issues. Notepad.exe creates ASCII text, or in MS Word you can save a file as 'text only'













Extended ASCII Codes As people gradually required computers to understand additional characters and non-printing characters the ASCII set became restrictive. As with most technology, it took a while to get a single standard for these extra characters and hence there are few varying 'extended' sets. The most popular is presented below.



Primele 32 de coduri corespund unor caractere netiparibile, denumite caractere de control (pentru imprimanta sau display). Din pacate, acelasi caracter de control trimis catre periferice diferite poate avea efecte diferite (motiv: lipsa de standardizare dintre periferice) - deci consultati documentatia aferenta perifericului! Nici macar comportamentul intre diverse sisteme de operare nu este consistent, astfel o linie de text se termina:

  • cu CR / LF in MS-DOS, CP/M
  • cu CR la Apple Macintosh, Apple II
  • cu LF sub Unix

Al doilea grup de 32 de coduri este folosit pentru a reprezenta semnele de punctuatie, caracterele speciale si cifrele. De exemplu, cifra 5 este codificata ca 35h, adica 0011 0101.

Al treilea grup de 32 de coduri este folosit pentru a reprezenta literele mari si (cum in engleza sunt doar 26 de litere) si unele semne speciale. De exemplu:

  • litera A este codificata ca 41h, adica 0100 0001
  • semnul este codificat ca 5Ch, adica 0101 1100

Al patrulea grup de 32 de coduri sunt foloite pentru a reprezenta literele mici, caractere speciale si inca un caracter de control (delete). Exemple:

  • litera a este codificata 61h, adica 0110 0001
  • semnul este codificat 7Ch, adica 0111 1100
  • delete este codificat 7Fh, adica 0111 1111

Observam cateva caracteristici ale codificarii ASCII:

  • bitul cei mai din stanga (al optulea) este 0 tot timpul
  • urmatorii bitii din stanga (al saptelea si al saselea) dau o indicatie rapida asupra caracterului codificat



al saptelea bit

al saselea bit


0

0

caractere de control

0

1

cifre si semne de punctuatie

1

0

litere mari si caractere speciale

1

1

litere mici si caractere speciale


A

0100 0001

a

0110 0001

  • intre codificarea literei mici si a celei mari corespondente singura diferenta este la bitul al 6-lea (el este 1 pentru litere mici, 0 pentru litere mari. Aceasta permite schimbarea foarte usoara din litere mici in mari sau invers, facand XOR intre codul ASCII al literei si 20h (0010 0000).

  • daca din codificarea unei cifre se scade 30h, se obtine pe un octet codificarea binara a valorii respective. Acelasi efect se obtine facand SI (AND) intre codul cifrei si 9h (0000 0111).[3]

Prezentam mai jos codificarea primelor 32 de caractere ASCII.



Hexa

Simbol

Descriere

00

NUL (null)


01

SOH (start of heading)


02

STX (start of text)


03

ETX (end of text)


04

EOT (end of transmission)

diferit de ETB

05

ENQ (enquiry)


06

ACK (acknowledge)


07

BEL (bell)

Pe un terminal teletype suna clopotelul. Pe multe terminale sau programe de emulare terminal scoate un "beep".

08

BS (backspace)

Muta cursorul (sau capul de tiparire) inapoi (spre stanga) un spatiu.

09

TAB (horizontal tab)

Muta cursorul (sau capul de tiparire) spre dreapta pe urmatoarea pozitie de tabulare. Pozitionarea depinde de perifericul de iesire, dar este adesea la 8 sau 10 spatii.

0A

LF (NL line feed, new line)

Muta cursorul (sau capul de tiparire) pe o linie noua. Pe sisteme Unix muta pe o linie noua SI la inceput de rand in extrema stanga..

0B

VT (vertical tab)


0C

FF (form feed)

Avanseaza hartia la inceputul paginii urmatoare (deca dispozitivul de iesire este o imprimanta)

0D

CR (carriage return)

Muta cursorul complet in partea stanga, dar NU avanseaza la linia  urmatoare.

0E

SO(shift out)

Trece dispozitvul de iesire pe setul alternat de caractere.

0F

SI (shift in)

Trece dispozitvul de iesire pe setul de baza de caractere.

10

DLE (data link escape)


11

DC1 (device control 1)


12

DC2 (device control 2)


13

DC3 (device control 3)


14

DC4 (device control 4)


15

NAK (negative acknowledge)


16

SYN (synchronous idle)


17

ETB (end of transmission block)

Diferit de EOT

18

CAN (cancel)


19

EM (end of medium)


1A

SUB (substitute)


1B

ESC (escape)


1C

FS (file separator)


1D

GS (group separator)


1E

RS (record separator)


1F

US (unit separator)









EBCDIC

ASCII is not the only format in use out there. IBM adopted EBCDIC (Extended Binary Coded Decimal Interchange Code) developed for punched cards in the early 1960s and still uses it on mainframes today. It is probably the next most well known character set due to the proliferation of IBM mainframes. It comes in at least six slightly differing forms, so again here is the most common.

EBCDIC and IBM Scan Codes


Unicode Tables v4

Ascii was very simplistic, and so was extended by adding 'extended' sets by various manufacturers. Apart from being confusing this was still restricted to 256 characters. Now computers are more widely established around the world the need to show other characters such as Japanese and Chinese languages along with various symbols became more important. Unicode is an attempt to standardise every character possible and the latest version (4) is shown below. Tables are in PDF format so you will need Adobe Acrobat Reader to view them.


General

Basic Latin

Latin-1 Supplement

Latin Extended-A

Latin Extended-B

Latin Extended Additional

IPA Extensions

Phonetic Extensions

Arabic

Armenian

Bengali

Buhid

Canadian Aboriginal Syllabics

Cherokee

Cypriot Syllabary

Cyrillic

Cyrillic Supplementary

Deseret

Devanagari

Ethiopic

Georgian

Gothic

Greek and Coptic

Greek Extended

Gujarati

Gurmukhi

Hanun??t;/b>

Hebrew

Kannada

Khmer

Khmer Symbols

Lao

Limbu

Linear B Ideograms

Linear B Syllabary

Malayalam

Mongolian

Myanmar

Ogham

Old Italic


Symbols and Miscellaneous

Arrows

Supplemental Arrows-A

Supplemental Arrows-B

Block Elements

Box Drawing

Braille Patterns

Byzantine Musical Symbols

Combining Diacritical Marks for Symbols

Control Pictures

Currency Symbols

Dingbats

Enclosed Alphanumerics

General Punctuation

Geometric Shapes

Letterlike Symbols

Mathematical Alphanumeric Symbols

Miscellaneous Mathematical Symbols-A

Miscellaneous Mathematical Symbols-B

Mathematical Operators

Supplemental Mathematical Operators

Miscellaneous Symbols

Miscellaneous Symbols and Arrows

Miscellaneous Technical

Musical Symbols

Number Forms

Optical Character Recognition

Superscripts and Subscripts

Tai Xuan Jing Symbols

Yijing Hexagram Symbols



Oriya

Osmanya

Runic

Shavian

Sinhala

Syriac

Tagalog

Tagbanwa

Tai Le

Tamil

Telugu

Thaana

Thai

Tibetan

Ugaritic

Yi Radicals

Yi Syllables

Combining Diacritical Marks

Spacing Modifier Letters

Bopomofo

Bopomofo Extended

CJK Compatibility

CJK Compatibility Forms

CJK Compatibility Ideographs

CJK Compatibility Ideographs Supplement

CJK Radicals Supplement

CJK Symbols and Punctuation

CJK Unified Ideographs

CJK Unified Ideographs Extension A

CJK Unified Ideographs Extension B

Enclosed CJK Letters and Months

Hangul Compatibility Jamo

Hangul Jamo

Hangul Syllables

Hiragana

Ideographic Description Characters

Kanbun

KangXi Radicals

Katakana

Katakana Phonetic Extensions





Sunt preluate cateva fisiere in directorul unicode latin




Reprezentarea numerelor reale in virgula mobila


Se porneste de la ideea ca 39.75 poate fi reprezentat ca 0.3975*102, deci un exponent (2), o mantisa (3975) si o baza (10). Mantisa este intotdeauna un numar subunitar (cu prima pozitie diferita de 0), exponentul poate fi negativ sau pozitiv, iar numarul ca atare poate fi pozitiv sau negativ.


Pentru codificarea numerelor in virgula mobila se folosesc 3 formate:


Format

bit semn

biti exponent

biti mantisa

simpla precizie pe 32 biti

1

8

23

dubla precizie pe 64 biti

1

11

52

real temporar pe 80 biti

1

15

64


Indiferent de format, sunt comune urmatoarele caracteristici:

  • bitul de semn este 1 (numar negativ) sau 0 (numar pozitiv).
  • exponentul este codificat in exces (127 pentru simpla precizie, 1023 pentru dubla precizie, respectiv 16383 pentru real temporar[4]).
  • nu se reprezinta punctul zecimal - este inteles implicit si nu mai este reprezentat in codificare
  • mantisa este un numar subunitar care are intotdeauna 1 pe prima pozitie - lucru inteles implicit si care nu mai este reprezentat in codificare.

Sa facem pasii succesivi o codificare in simpla precizie pe 32 biti. Primul pas consta in reprezentarea numarului real in binar: de pilda 41.75=(32+8+1).(1/2 + 1/4) = 101001.11 Procedand ca mai sus, il putem rescrie ca 0.10100111*26, deci exponentul este 2, mantisa este 1010011, iar baza este 2. Pentru a codifica acest numar real in virgula mobila pe 32 biti se aplica succesiv urmatorii pasi:

a)     bitul cel mai din stanga este semnul numarului (0 pentru numere pozitive, 1 pentru numere negative)

b)     pe urmatorii 8 biti se codifica exponentul in exces 127 - deci 6+127 = 133 = 10000101

c)     pe urmatorii 23 de biti se scrie mantisa (mai putin primul bit care este oricum 1), completata la dreapta cu 0


41.75

Semn

Exponent

Mantisa

Observatii

0

10000101

010011100000 00000000000


0100001 010100111 0000000 000000000

in binar

42A70000

in hexa


Alte exemple:

-3.5

-3.5 este -11.1 sau .111*21

semn:

1




exponent: 1+127


10000000



mantisa: 111



110000000000 00000000000

Sir complet in binar

1 1000000011 000000000 000000000000

Sir complet in hexa

C0600000


+3.5

+3.5 este 11.1 sau .111*21

semn:

0




exponent: 1+127


10000000



mantisa: 111



110000000 00000000000000

Sir complet in binar

0 100000001100000 000000000 0000000

Sir complet in hexa

40600000




[1] reprezentarea este exacta daca partea fractionara este compusa doar din puteri negative ale lui 2, cu aproximatie daca partea fractionara nu se descompune exact in puteri negative ale lui 2.

[2] atentie: virgula este separator intre mii !

[3] Atentie: acest mecanism functioneaza corect doar pentru un octet! 123 se codifica ASCII ca 31h 32h 33h, deci scaderea 30h pe fiecare octet va duce la secventa de biti 01h 02h 03h - adica 0000 0001 0000 0010 0000 0011, total diferita de corectul 7Bh, adica 111 1011

[4] reprezentarea in exces are avantajul ca permite codificarea numerelor intregi cu semn fara a aloca un bit special pentru acesta