Aussitôt l'arriver du binaire dans le monde des ordinateurs, les «Bases numérique» font partie des algorithmes mathématiques de base pour le dénombrement et la quantification d'information.
Les bases sont très variés, les plus populaires sont Binaire (2), Ternaire (3), Quintale (5), Octale (8), Décimale (10), Hexadécimale (16),..La seule limite est l'imagination du programmeur...
Voici tout d'abord une table des bases les plus populaires:
Base 2 (Binaire) | Base 3 (Ternaire) | Base 8 (Octale) | Base 10 (Décimal) | Base 16 (Hexadécimal) | Base 62 |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 | 1 | 1 |
10 | 2 | 2 | 2 | 2 | 2 |
11 | 10 | 3 | 3 | 3 | 3 |
100 | 11 | 4 | 4 | 4 | 4 |
101 | 12 | 5 | 5 | 5 | 5 |
110 | 20 | 6 | 6 | 6 | 6 |
111 | 21 | 7 | 7 | 7 | 7 |
1000 | 22 | 10 | 8 | 8 | 8 |
1001 | 100 | 11 | 9 | 9 | 9 |
1010 | 101 | 12 | 10 | A | A |
1011 | 102 | 13 | 11 | B | B |
1100 | 110 | 14 | 12 | C | C |
1101 | 111 | 15 | 13 | D | D |
1110 | 112 | 16 | 14 | E | E |
1111 | 120 | 17 | 15 | F | F |
10000 | 121 | 20 | 16 | 10 | G |
10001 | 122 | 21 | 17 | 11 | H |
10010 | 200 | 22 | 18 | 12 | I |
10011 | 201 | 23 | 19 | 13 | J |
10100 | 202 | 24 | 20 | 14 | K |
10101 | 210 | 25 | 21 | 15 | L |
10110 | 211 | 26 | 22 | 16 | M |
10111 | 212 | 27 | 23 | 17 | N |
11000 | 220 | 30 | 24 | 18 | O |
11001 | 221 | 31 | 25 | 19 | P |
11010 | 222 | 32 | 26 | 1A | Q |
11011 | 1000 | 33 | 27 | 1B | R |
11100 | 1001 | 34 | 28 | 1C | S |
11101 | 1002 | 35 | 29 | 1D | T |
11110 | 1010 | 36 | 30 | 1E | U |
11111 | 1011 | 37 | 31 | 1F | V |
100000 | 1012 | 40 | 32 | 20 | W |
100001 | 1020 | 41 | 33 | 21 | X |
100010 | 1021 | 42 | 34 | 22 | Y |
100011 | 1022 | 43 | 35 | 23 | Z |
100100 | 1100 | 44 | 36 | 24 | a |
100101 | 1101 | 45 | 37 | 25 | b |
100110 | 1102 | 46 | 38 | 26 | c |
100111 | 1110 | 47 | 39 | 27 | d |
101000 | 1111 | 50 | 40 | 28 | e |
101001 | 1112 | 51 | 41 | 29 | f |
101010 | 1120 | 52 | 42 | 2A | g |
101011 | 1121 | 53 | 43 | 2B | h |
101100 | 1122 | 54 | 44 | 2C | i |
101101 | 1200 | 55 | 45 | 2D | j |
101110 | 1201 | 56 | 46 | 2E | k |
101111 | 1202 | 57 | 47 | 2F | l |
110000 | 1210 | 60 | 48 | 30 | m |
110001 | 1211 | 61 | 49 | 31 | n |
110010 | 1212 | 62 | 50 | 32 | o |
110011 | 1220 | 63 | 51 | 33 | p |
110100 | 1221 | 64 | 52 | 34 | q |
110101 | 1222 | 65 | 53 | 35 | r |
110110 | 2000 | 66 | 54 | 36 | s |
110111 | 2001 | 67 | 55 | 37 | t |
111000 | 2002 | 70 | 56 | 38 | u |
111001 | 2010 | 71 | 57 | 39 | v |
111010 | 2011 | 72 | 58 | 3A | w |
111011 | 2012 | 73 | 59 | 3B | x |
111100 | 2020 | 74 | 60 | 3C | y |
111101 | 2021 | 75 | 61 | 3D | z |
Ternaire
Voici un programme permettant d'effectuer une conversion d'une valeur décimal à ternaire en QuickPascal:
Program Ternaire;
Function DecimalToTernaire(value:Integer):String;
Var
Result,strNumber:String;
Begin
If value = 0 Then DecimalToTernaire := '0'
Else Begin
Result := '';
While value > 0 do Begin
Str(value mod 3,strNumber);
Result := strNumber + result;
value := value div 3;
End;
DecimalToTernaire:=Result;
End;
End;
Var
I:Byte;
BEGIN
For I := 0 to 20 do Begin
WriteLn(I,' = ',DecimalToTernaire(I));
End;
END.
on obtiendra le résultat suivant:
0 = 01 = 1
2 = 2
3 = 10
4 = 11
5 = 12
6 = 20
7 = 21
8 = 22
9 = 100
10 = 101
11 = 102
12 = 110
13 = 111
14 = 112
15 = 120
16 = 121
17 = 122
18 = 200
19 = 201
20 = 202
Hexadécimal
Voici un programme très performant permettant d'effectuer une conversion d'une valeur d'un octet à hexadécimal en QuickPascal:
Function ByteHex2Str(value:Byte):String;
Const
matrix:Array[0..15]of Char = ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
Begin
ByteHex2Str:=matrix[(value shr 4) and $0F]+matrix[value and $F];
End;
BEGIN
WriteLn('00h = ',ByteHex2Str($00));
WriteLn('01h = ',ByteHex2Str($01));
WriteLn('02h = ',ByteHex2Str($02));
WriteLn('0Ah = ',ByteHex2Str($0A));
WriteLn('0Fh = ',ByteHex2Str($0F));
WriteLn('10h = ',ByteHex2Str($10));
WriteLn('20h = ',ByteHex2Str($20));
WriteLn('56h = ',ByteHex2Str($56));
WriteLn('73h = ',ByteHex2Str($73));
WriteLn('EFh = ',ByteHex2Str($EF));
WriteLn('FFh = ',ByteHex2Str($FF));
END.
on obtiendra le résultat suivant:
00h = 0001h = 01
02h = 02
0Ah = 0A
0Fh = 0F
10h = 10
20h = 20
56h = 56
73h = 73
EFh = EF
FFh = FF
Base62
Voici un programme permettant d'effectuer une conversion d'une valeur décimal à «Base62» en QuickPascal:
Program Base62;
Function DecimalToBase62(value:Integer):String;
Const
TBase:Array[0..61]of Char='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
Var
Result:String;
Begin
If value = 0 Then DecimalToBase62 := '0'
Else Begin
Result := '';
While value > 0 do Begin
Result := TBase[value mod 62] + result;
value := value div 62;
End;
DecimalToBase62:=Result;
End;
End;
Var
I:Byte;
BEGIN
For I := 60 to 80 do Begin
WriteLn(I,' = ',DecimalToBase62(I));
End;
END.
on obtiendra le résultat suivant:
60 = y61 = z
62 = 10
63 = 11
64 = 12
65 = 13
66 = 14
67 = 15
68 = 16
69 = 17
70 = 18
71 = 19
72 = 1A
73 = 1B
74 = 1C
75 = 1D
76 = 1E
77 = 1F
78 = 1G
79 = 1H
80 = 1I
BaseX
Avec exemples les précédents, vous l'aurez compris, il est possible d'avoir une formule pour n'importe quel base. En somme, voici un programme permettant d'effectuer une conversion d'une valeur décimal à base relative entre 1 et 61 (mais 13 pour celui-ci) en QuickPascal:
Program BaseX;
Function DecimalToBaseX(value:Integer;baseNumber:Byte):String;
Const
TBase:Array[0..61]of Char='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
Var
Result:String;
Begin
If value = 0 Then DecimalToBaseX := TBase[0]
Else Begin
Result := '';
While value > 0 do Begin
Result := TBase[value mod baseNumber] + result;
value := value div baseNumber;
End;
DecimalToBaseX:=Result;
End;
End;
Var
I:Byte;
BEGIN
For I := 0 to 20 do Begin
WriteLn(I,' = ',DecimalToBaseX(I,13));
End;
END.
on obtiendra le résultat suivant :
0 = 01 = 1
2 = 2
3 = 3
4 = 4
5 = 5
6 = 6
7 = 7
8 = 8
9 = 9
10 = A
11 = B
12 = C
13 = 10
14 = 11
15 = 12
16 = 13
17 = 14
18 = 15
19 = 16
20 = 17