O lege
Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de
versiunea revizuită la 13 martie 2013; verificările necesită
9 modificări .
A-law este un algoritm de compresie cu pierderi folosit pentru a comprima datele audio
.
Implementări pentru numere întregi semnate pe 16 biți
Principiul codificării este similar cu codificarea numerelor în virgulă mobilă . Fiecare probă este codificată într-un câmp de 8 biți . Cel mai semnificativ bit este bitul de semn, următorii 3 biți sunt exponentul fără semn și ultimii 4 biți sunt mantisa . Astfel, din cei 16 biți utilizați, doar 12 biți conțin informații semnificative, iar 4 biți din 16 sunt uneori aruncați.
Pasul 1
Dacă numărul este negativ, acesta este inversat și se presupune că s = 0, în caz contrar s = 1.
Pasul 2
Un număr de 16 biți este convertit într-un număr de 8 biți conform următorului tabel. Pentru claritate , nibbles - nibbles - sunt despărțiți printr-un backtick (`); s este bitul de semn; asteriscurile indică biții care se pierd în timpul compresiei.
numărul original |
comprimat
|
s000`0000`wxyz`**** |
s000`wxyz
|
s000`0001`wxyz`**** |
s001`wxyz
|
s000`001w`xyz***** |
s010`wxyz
|
s000`01wx`yz****`**** |
s011`wxyz
|
s000`1wxy`z****`**** |
s100`wxyz
|
s001`wxyz`****`**** |
s101`wxyz
|
s01w`xyz****`****`**** |
s110`wxyz
|
s1wx`yz**`****`**** |
s111`wxyz
|
Pasul 3
Biții sunt inversați printr-unul, începând din partea cea mai din dreapta (adică un număr de 8 biți este XORed 0x55).
Exemple
În exemplele de mai jos, indicele indică adâncimea de biți ( zecimal sau binar ); la pasul 1, mantisa este subliniată (parte a cifrelor care se transformă în wxyz la pasul 2).
Exemplul 1
666 10 = 0000`0010`1001`1010 2
Pasul 1. Semn bit s = 1: 0000`001 0`100 1`1010 2
Pasul 2. Compresia în sine (corespunde cu s001`wxyz): 1010`0100 2
Pasul 3. Inversați: 1111`0001 2 = F1 16 = 241 10 .
Exemplul 2
-6666 10 = 1110`0101`1111`0110 2
Pasul 1. Inversați numărul, semnul bit s = 0: 0001` 1010 `0000`1001 2
Pasul 2. Compresia în sine (corespunde cu s011`wxyz): 0101`1010 2
Pasul 3. Inversați: 0000`1111 2 =15 10
Vezi și