Au cours d'une de mes lectures de cours C, je suis tombé sur ce bout de code qui permet d'optimiser une inversion de bits dans un entier par une référence à une table de correspondance :
Je manque d’expérience en C et je ne comprends pas la syntaxe de cette partie notamment :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Reverse bits in word by lookup table : static const unsigned char BitReverseTable256[256] = { # define R2(n) n, n + 2*64, n + 1*64, n + 3*64 # define R4(n) R2(n), R2(n + 2*16), R2(n + 1*16), R2(n + 3*16) # define R6(n) R4(n), R4(n + 2*4 ), R4(n + 1*4 ), R4(n + 3*4 ) R6(0), R6(2), R6(1), R6(3) }; unsigned int v; // reverse 32-bit value, 8 bits at time unsigned int c; // c will get v reversed // Option 1: c = (BitReverseTable256[v & 0xff] << 24) | (BitReverseTable256[(v >> 8) & 0xff] << 16) | (BitReverseTable256[(v >> 16) & 0xff] << 8) | (BitReverseTable256[(v >> 24) & 0xff]);
Comment je dois lire ça ? Un tableau dans lequel il y a des macros définies ? Mais combien d'éléments constituent le tableau ici à sa déclaration ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 static const unsigned char BitReverseTable256[256] = { # define R2(n) n, n + 2*64, n + 1*64, n + 3*64 # define R4(n) R2(n), R2(n + 2*16), R2(n + 1*16), R2(n + 3*16) # define R6(n) R4(n), R4(n + 2*4 ), R4(n + 1*4 ), R4(n + 3*4 ) R6(0), R6(2), R6(1), R6(3) };
(Je n'avais jamais vu des macros placées comme ça dans un tableau). Bref, je suis perdu au niveau de la syntaxe.
Si vous pouviez m'éclairer
Merci,
salutations.
Partager