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 Delphi :
- Program Ternaire;
-
- {$APPTYPE CONSOLE}
-
- Uses SysUtils;
-
- 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 Delphi :
- Program Hexadecimal;
-
- {$APPTYPE CONSOLE}
-
- Uses SysUtils;
-
- 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 Delphi :
- Program Base62;
-
- {$APPTYPE CONSOLE}
-
- Uses SysUtils;
-
- 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 très pour celui-ci) en Delphi :
- Program BaseX;
-
- {$APPTYPE CONSOLE}
-
- Uses SysUtils;
-
- 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