63 votes

Pourquoi utiliser l'hexagone ?

Hey ! Je regardais ce code à http://www.gnu.org/software/m68hc11/examples/primes_8c-source.html

J'ai remarqué que dans certaines situations, ils utilisaient des chiffres hexagonaux, comme à la ligne 134 :

for (j = 1; val && j <= 0x80; j <<= 1, q++)

Maintenant, pourquoi utiliseraient-ils le 0x80 ? Je ne suis pas très doué avec les hexagones mais j'ai trouvé un outil en ligne pour convertir les hexagones en décimales et il m'a donné 128 pour 0x80.

Avant la ligne 134, à la ligne 114, il y a aussi ceci :

small_n = (n & 0xffff0000) == 0;

Le passage de l'hexagone au décimal m'a donné 4294901760 pour ce numéro hexagonal. Donc ici, dans cette ligne, ils font un bit ET et comparent le résultat à 0 ??

Pourquoi ne pas simplement utiliser le numéro ? Quelqu'un peut-il m'expliquer et me donner des exemples d'autres situations ?

J'ai également vu de grandes lignes de code où il n'y avait que des chiffres hexadécimaux et je n'ai jamais vraiment compris pourquoi :(

7voto

mkClark Points 648

La plus grande utilisation de l'hexagone est probablement la programmation embarquée. Les nombres hexadécimaux sont utilisés pour masquer des bits individuels dans des registres matériels, ou pour diviser plusieurs valeurs numériques regroupées dans un seul registre de 8, 16 ou 32 bits.

Lorsque l'on spécifie des masques de bits individuels, beaucoup de gens commencent par :

#define bit_0 1
#define bit_1 2
#define bit_2 4
#define bit_3 8
#define bit_4 16
etc...

Après un certain temps, ils passent à :

#define bit_0 0x01
#define bit_1 0x02
#define bit_2 0x04
#define bit_3 0x08
#define bit_4 0x10
etc...

Ils apprennent ensuite à tricher et à laisser le compilateur générer les valeurs dans le cadre de l'optimisation de la compilation :

#define bit_0 (1<<0)
#define bit_1 (1<<1)
#define bit_2 (1<<2)
#define bit_3 (1<<3)
#define bit_4 (1<<4)
etc...

6voto

Tim Points 13334

Parfois, la représentation visuelle des valeurs en HEX rend le code plus lisible ou plus compréhensible. Par exemple, le bitmasking ou l'utilisation des bits ne sont pas évidents lorsqu'on regarde les représentations décimales des nombres.

Cela peut parfois dépendre de la quantité d'espace qu'un type de valeur particulier peut offrir, ce qui peut également jouer un rôle.

Un exemple typique est celui d'un environnement binaire. Au lieu d'utiliser le décimal pour indiquer certaines valeurs, nous utilisons le binaire.

Supposons qu'un objet possède un ensemble non exclusif de propriétés dont les valeurs sont soit activées, soit désactivées (3 d'entre elles). Une façon de représenter l'état de ces propriétés est d'utiliser 3 bits.

les représentations valides sont de 0 à 7 en décimal, mais ce n'est pas si évident. la représentation binaire est plus évidente :

000, 001, 010, 011, 100, 101, 110, 111

En outre, certaines personnes sont tout simplement très à l'aise avec l'hexagone. Notez également que les nombres magiques codés en dur ne sont que cela et que le système de numérotation utilisé n'est pas si important que cela.

J'espère que cela vous aidera.

6voto

En général, l'utilisation de nombres hexadécimaux au lieu de décimaux s'explique par le fait que l'ordinateur travaille avec des bits (nombres binaires) et que, lorsque vous travaillez avec des bits, il est plus compréhensible d'utiliser des nombres hexadécimaux, car il est plus facile de passer de l'hexadécimal au binaire que du décimal au binaire.

OxFF = 1111 1111 ( F = 1111 )

mais

255 = 1111 1111

parce que

255 / 2 = 127 (rest 1)
127 / 2 = 63 (rest 1)
63 / 2 = 31 (rest 1)
... etc

Tu peux voir ça ? C'est beaucoup plus simple de passer de l'hexagone au binaire.

4voto

dongilmore Points 492

Il y a 8 bits dans un octet. Le code hexadécimal, en base 16, est laconique. Toute valeur d'octet possible est exprimée en utilisant deux caractères de la collection 0..9, plus a,b,c,d,e,f.

La base 256 serait plus laconique. Chaque octet possible pourrait avoir son propre caractère, mais la plupart des langues humaines n'utilisent pas 256 caractères, et c'est donc l'hexagone qui l'emporte.

Pour comprendre l'importance d'être concis, considérez que dans les années 1970, lorsque vous vouliez examiner votre mégaoctet de mémoire, il était imprimé en hexadécimal. L'impression utilisait plusieurs milliers de pages de grand papier. L'octal aurait gaspillé encore plus d'arbres.

4voto

Jim C Points 4736

Les nombres hexagonaux, ou hexadécimaux, représentent 4 bits de données, de 0 à 15 ou en HEX 0 à F. Deux valeurs hexagonales représentent un octet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X