Pourquoi apprendre l'hexadécimal? [fermé]

28

J'ai pris pas mal de cours de programmation d'introduction dans ma journée, principalement pour me mouiller les pieds dans tous les types de programmation que je trouve. Sans surprise, à peu près toutes les classes passent par le même format: introduction au matériel, introduction au logiciel, puis vous entrez dans la programmation proprement dite. Bien qu'il soit très important de comprendre le fonctionnement du matériel et des logiciels, j'ai toujours été confus par un sujet qui a été abordé dans chaque cours.

Dans la section d'introduction au logiciel que j'ai trouvée, sans faute, ils mettent toujours l'accent sur la maîtrise des systèmes de nombres binaires, hexadécimaux et parfois même octaux. Je comprends qu'il est bon de comprendre ce que sont ces choses et comment un ordinateur les interpréterait, mais je ne me suis jamais trouvé réellement obligé de savoir lire et écrire l'un de ces systèmes numériques. Vraiment, la seule fois où j'ai vu autre chose que la base 10, c'est pour les couleurs en CSS, ce qui est encore plus facile si vous utilisez quelque chose comme www.colorpicker.com

Ai-je simplement ignoré les merveilleuses utilisations de ces systèmes numériques non base-10 dans le monde de la programmation, ou est-ce simplement une vieille tradition d'inclure ces sections dans tous les manuels de programmation? Quelqu'un at-il un bon exemple de l'endroit où le programmeur moyen utiliserait réellement un nombre octal?

jwegner
la source
1
Quelqu'un at-il un bon exemple de l'endroit où le programmeur moyen utiliserait réellement un nombre octal? Oui, si vous vous retrouvez à écrire des logiciels liés à l'industrie de l'aviation, vous rencontrerez probablement des codes de transpondeur, qui sont un nombre octal à 4 chiffres. en.wikipedia.org/wiki/Transponder_%28aviation%29
Ben Cottrell

Réponses:

14

Toutes les réponses sont bonnes mais elles n'abordent pas ce que je pense être la partie la plus précieuse. Apprendre à "penser" dans différentes bases vous rend beaucoup plus à l'aise avec la façon dont les ordinateurs traitent les nombres.

Si vous vouliez stocker une chaîne de lettres minuscules assez bien emballée, comment feriez-vous?

Eh bien, il y a 26 lettres minuscules, qui se traduisent facilement en une plage de 0 à 31 qui est un nombre de 5 bits, vous pouvez emballer 6 nombres de 5 bits dans un champ de 32 bits (int?) Et même en avoir suffisamment pour quelques signes de ponctuation.

Je ne dis pas que l'hexagone aide à des choses comme ça, mais comprendre comment les nombres se convertissent.

Un autre cas, de temps en temps, vous utilisez la base-64 pour passer des nombres assez longs en ascii. Souhaitez-vous savoir comment mettre en œuvre cela? Pourquoi le mettre en œuvre de cette façon? Saviez-vous même que c'est ce que vous tapiez à chaque fois que vous tapiez la "CLÉ CD" dans la boîte d'enregistrement d'un jeu?

Aussi, pour le plaisir, jouez avec la base 12 pendant un certain temps. Les mathématiques s'avèrent vraiment intéressantes en base 12 (la base 10 est stupide en comparaison, j'aurais aimé que nous évoluions avec 6 doigts - nous pourrions avoir des décennies d'avance dans notre compréhension des mathématiques). Certains premiers humains très intelligents ont utilisé la base 12 pour développer l'horloge.

Dans la base 10, nous avons 3 nombres "Cool" qui créent des motifs faciles, 2, 5 et 9 avec 8, 6 et 4 comme nombres cool "Minor". Dans la base 12, vous avez 2,3,4,6,11 en tant que nombres "cool" avec 8,9 et 10 en tant que nombres cool "mineurs", ce qui signifie que si nous utilisions la base 12, nous serions beaucoup mieux à reconnaître les modèles dans les nombres parce que nous les verrions tout le temps.

Aussi, binaire. Vous pouvez compter sur une main pour 32 - je le fais un peu, est parfois utile lorsque le comptage sur 5 ne suffit pas :)

Le binaire est très amusant, mais il ne se traduit tout simplement pas bien. Lorsque vous vous sentez bien avec l'hexagone, vous commencez à voir "A" comme 1010 et "5" comme 0101, et ces choses commencent vraiment à avoir de l'importance. Si vous avez un champ de bits dont vous voulez extraire le 6e bit: 00100000, avec quoi "et" le faites-vous? Vous devez juste savoir que c'est 0x20.

Si vous voyez du code qui contient quelque chose avec 0x0600, quels bits sont extraits? Vous devriez savoir sans même y penser - vous devriez en fait lire cela comme s'il était écrit 0000011000000000 (mais plus facile à lire car vous n'avez pas à compter les zéros).

Pourquoi voudriez-vous limiter votre cerveau et sa capacité à traiter des données?

Bill K
la source
En fait, les horloges ont été développées en base60 .
Denis de Bernardy
@Denis J'avais l'impression que la théorie actuelle était qu'ils avaient été développés par un peuple qui comptait en base douze et qui avait perdu au profit de gens plus stupides qui ne pouvaient pas penser passer leurs doigts. 60 n'est que les 12 divisions encore divisées en groupes de 5 et semble être un after-hack par les grognements de la base 10 :)
Bill K
Pourrait être. Pour être honnête, je ne suis en aucun cas un spécialiste. Votre commentaire n'a fait que ramener un souvenir oublié depuis longtemps. Je me souviens également que les angles mesurés à 360 degrés proviennent de la base 60 (et par les mêmes inventeurs babyloniens, à ce sujet), mais comme vous le faites remarquer, il se peut que les grognements de la base 10 aient simplement dépassé ce qui était à l'origine les mathématiciens de la base 12. :-) Maintenant, imaginez si nous comptions en base 20, comme certains Indiens d'Amérique l'ont fait. :-D
Denis de Bernardy
44

Que faut-il apprendre? Vous devez comprendre différentes bases numériques pour être un programmeur compétent, mais en ce qui concerne l'hex, il y a peu à apprendre, sauf que ABCDEF vient après 9.

Neil Butterworth
la source
8
OP peut faire référence à la capacité de transposer mentalement à la base 10 à partir d'autres bases. Cela a peut-être été une compétence utile à un moment donné, et peut encore être pour une certaine catégorie de programmeurs de bas niveau, mais est largement hors de propos aujourd'hui. Vous pouvez faire la conversion dans vim trivialement, par exemple.
Rein Henrichs
C'est correct. J'aurais dû être plus clair.
jwegner
2
@Rein Je n'ai jamais été très bon à faire ça (je dois faire le calcul dans ma tête), donc je ne peux pas dire. Cependant, j'étais capable mentalement de transposer de l'hexagone en langage d'assemblage Z80, ce qui était une chose utile à faire à l'époque. Je soupçonne que la capacité de transposer de l'assembleur hexadécimal en 80x86 (ou autre) est toujours utile pour les programmeurs travaillant aujourd'hui.
Neil Butterworth
1
@Neil Butterworth: 8080 opcodes ont plus de sens en octal, vraiment, si la mémoire est bonne. Ma mémoire est vraiment floue sur la façon dont cela s'applique aux extensions Z80.
David Thornley
1
@Neil: Je pense que la partie importante était les instructions de déplacement de registre à registre, qui semblent être 01xxxyyy au format bit, où xxx est la destination et la source yyy. Je ne sais pas s'il y a une autre signification octale.
David Thornley
18

Quelqu'un at-il un bon exemple de l'endroit où le programmeur moyen utiliserait réellement un nombre octal?

Octal? Pas généralement, non, à l'exception des autorisations * nix.

Hexadécimal? Tu paries. Vous ignorez le nombre assez important d'entre nous qui mélangent des bits autour des systèmes embarqués, examinant les protocoles ou les formats de fichiers au niveau du bit, et cetera. Mais bien sûr, si vous êtes loin du métal en train de faire des applications ou du travail sur le Web, vous pourriez vous en sortir plus facilement.

Exemple: les registres de configuration sur les microcontrôleurs et similaires.

Prenez le numéro 54312, pris en frappant des touches au hasard. Pouvez-vous dire quels bits sont définis? Je ne peux pas, du moins pas du haut de ma tête. L'équivalent hexadécimal est donc 0xd428. Cetted'autre part, me dit tout de suite que le motif de bits que je regarde est 1101 0100 0010 1000. Il est plus logiquement structuré pour ce genre de chose, et vous vous retrouvez en ayant besoin tout le temps lorsque vous êtes proche de la métal. Disons que le nombre ci-dessus est ce que j'obtiens lors de la réinitialisation du mcu, et que j'ai besoin des bits 7 et 9 définis pour une raison quelconque. En hexadécimal, je peux facilement voir que le nombre résultant devrait être 0xd6a8, mais en décimal? C'est 54952, loin d'être aussi intuitif si vous me le demandez. Bien sûr, il s'agit d'ajouter 640 à la valeur, mais c'est plus pénible à comprendre. Bien sûr, dans la pratique, on peut simplement déplacer les bits à la position correcte et OU avec la valeur d'origine, mais vous pouvez toujours vouloir savoir quelle est la représentation finale.

n42
la source
1
Quel type de message pose la question "pourquoi devrais-je me soucier des bits qui sont définis?" Pour certaines (beaucoup? La plupart?) Applications, cela n'est pas pertinent.
Neil Butterworth
10
D'accord - en supposant que nous parlons de développement de haut niveau. Faible niveau, que ce soit un peu particulier est réglé ou effacé non seulement possible, mais va parfois déterminer si les bottes micro sanglantes du tout, ou si un périphérique dont vous avez besoin obtient le pouvoir, ou si elle fonctionne à une vitesse d'horloge de x plutôt que y . Ce n'est que le début, et si vous traitez avec ce type de développement, en gros, les bits simples comptent. Parfois beaucoup. Mais encore une fois, cela dépend de votre domaine, je dis juste; N'oubliez pas le monde embarqué. =)
n42
1
+1 - plus vous vous rapprochez de la machine, plus vous avez besoin d'utiliser différentes bases. Ce n'est pas seulement intégré; la plupart des langues ont des drapeaux de bits et elles sont souvent écrites en hexadécimal pour des raisons évidentes. Inversement, il est assez inutile d'enseigner dans un premier cours de programmation, mais alors la plupart des premiers cours de programmation sont assez inutiles. Presque tous les programmeurs apprennent d'eux-mêmes, non?
1
@Davor: C'est parce que l'hex est plus facile à lire. Je peux comprendre une valeur hexadécimale à 8 chiffres beaucoup plus rapidement qu'une valeur binaire à 32 chiffres.
Steve S
2
@Steve S: Honnêtement, je suppose que c'est aussi parce que nous sommes un groupe paresseux. 0x80 est plus court à écrire que 0b10000000. Mais je suis d'accord. Je suis également d'accord pour dire que cela n'a pas beaucoup de sens dans un premier cours de programmation, mais vous pouvez le pousser dans les mathématiques discrètes, la programmation en temps réel, l'organisation informatique, etc.
n42
12

Quelqu'un at-il un bon exemple de l'endroit où le programmeur moyen utiliserait réellement un nombre octal?

Si vous définissez des autorisations sur un fichier sous Unix (ou Linux), vous utilisez un nombre octal à 3 chiffres. Le premier chiffre correspond aux autorisations de l'utilisateur, le second aux autorisations du groupe et le dernier chiffre aux autorisations accordées à tout le monde.

J'ai dû comprendre ce fait dans le code que j'ai écrit la semaine dernière.

Si vous regardez la sortie d'algorithmes de hachage standard comme MD5, vous les trouverez souvent écrits en hexadécimal. J'ai vu un certain nombre de cas où cela a conduit à l'arithmétique dans des bases inhabituelles.

Si vous voulez comprendre comment la virgule flottante est représentée en interne, et donc pourquoi 1/10 n'est pas représenté précisément, vous devez absolument comprendre comment faire de l'arithmétique dans différentes bases. Il s'agit d'une connaissance ésotérique jusqu'au jour où elle vous mord à l'arrière et que vous devez soudainement la comprendre rapidement.

Et il y a une tonne d'autres cas où vous découvrirez la nature binaire fondamentale des données à l'intérieur des ordinateurs. Bien sûr, si vous écrivez simplement un site Web CRUD, vous n'en rencontrerez probablement aucun car cela se produit à des niveaux que quelqu'un d'autre a déjà traités.

btilly
la source
4
* Les autorisations nix ne sont pas vraies octales. Vous n'effectuez pas de calculs mathématiques avec ces représentations. Au mieux, ce sont des représentations octales d'un masque binaire.
Joel Etherton
@Joel Etherton: Lorsque vous obtenez les autorisations d'une statistique de fichier, elles apparaissent sous forme de nombres qui par défaut s'afficheront en base 10. Si vous ne comprenez pas la conversion vers / depuis octal, ces nombres sont difficiles à comprendre. J'écrivais de la documentation qui devait expliquer ce fait. Il y avait beaucoup de calculs mathématiques.
btilly
@btilly: Vous comprenez mal ce que je dis. Si vous définissez des autorisations sur un fichier à 755, vous n'aurez pas à ajouter cela à quoi que ce soit. C'est juste un masque qui décrit les combinaisons de permissions. Bien sûr, vous devez reconnaître que cela signifie (4 + 2 + 1) (4 + 0 + 1) (4 + 0 + 1), mais ce ne sont encore que des représentations du masque binaire. À quoi faites-vous référence lorsque vous dites "stat fichier"? Je n'ai jamais vu une statistique de fichier pour les autorisations délivrées en base 10 (respectant strictement cet exemple).
Joel Etherton
1
@Joel Etherton: Essayez perl -le '@stat = stat(shift); print $stat[2]' some_fileet vous obtiendrez une statistique sous forme de nombre en base 10. Vous devez le passer dans Perl de chmodla même manière. Par conséquent, il est logique de stocker le numéro de cette façon dans une base de données, auquel cas je dois documenter ce que ces chiffres ont à faire avec des autorisations Unix plus familières. Comme je l'ai dit, ce n'était pas un exemple hypothétique.
btilly
@Joel Etherton: disons que vous avez un fichier dont les autorisations sont 419 (décimal), vous voulez rendre le fichier exécutable par l'utilisateur, mais pas lisible par tout le monde. Comment devez-vous modifier le numéro? La valeur renvoyée dans l'appel C stat () est un int, la façon dont vous choisissez d'imprimer est, enfin, une autre affaire.
Vatine
9

Espérons que dans le monde réel, vous ne serez pas interrogé sur la conversion de Hex en binaire en décimal. Vous aurez des outils à votre disposition pour convertir comme bon vous semble.

Je suis d'accord que vous devriez comprendre ce qui se passe, mais pourquoi mémoriser quand vous pouvez le rechercher?

Cependant, j'ai trouvé utile de se souvenir des nombres clés (pour moi 0x64 = 100, 0xFF = 255, 0xFFFF = 65535, etc.) car ils reviennent beaucoup.

Pourrais-je dire ce que 8675309 est en binaire, hexadécimal et octal? Non, mais je peux ouvrir un outil qui le peut quand j'en ai besoin.

Dylan Yaga
la source
3
Vous avez oublié 57005, couramment utilisé comme constelvis = 57005;
Bevan
5

La seule chose pour laquelle j'ai jamais utilisé l'octal est les autorisations de fichiers sur les systèmes Unix.

Hex et binaire sont très utiles si vous travaillez avec des protocoles proches du fil ou proches du transfert de données métalliques. Fondamentalement, les données circulent en binaire, qui est trivialement représenté grignoter à la fois en hexadécimal.

Vous constaterez également que les fiches techniques citent souvent des valeurs hexadécimales, il est donc préférable d'afficher la valeur dans le code telle qu'elle apparaît dans la feuille de données.

Si vous utilisez beaucoup l'un d'eux, vous finissez par être assez compétent pour convertir en décimal et à partir de décimal dans votre tête, au moins pour les valeurs courantes.

Tout cela dit; Je soupçonne que l'accent mis est principalement historique. Comme vous le dites, il y a beaucoup de programmeurs qui ont peu besoin d'autre chose que de la décimale.

Luke Graham
la source
5

Vous vous demandez en fait pourquoi apprendre la puissance de 2 représentations numériques?

Les ordinateurs sont constitués de circuits , le courant électrique circule à travers les circuits à deux niveaux différents, haut et bas pour représenter les deux niveaux de courants, nous utilisons des chiffres binaires car ils peuvent contenir deux états, l'un (haut) ou zéro (bas).

Les chiffres binaires forment des motifs . Par exemple, si la seule façon dont vous et moi pouvons parler, c'est à travers un circuit, nous pouvons établir que si vous voulez m'envoyer la lettre A, vous m'enverrez le modèle binaire: 1000001. Puisque je suis paresseux , Je ne veux pas mémoriser les 7 sept chiffres. Au lieu de cela, j'utiliserai une puissance de 2 système de numérotation pour représenter les gros chiffres binaires en un plus petit. Je peux utiliser 8 (2 ^ 3) ou 16 (2 ^ 4).

Comme vous pouvez le voir, la plupart des matériels et logiciels informatiques utilisent une représentation binaire et nous, les humains, utilisons la puissance de 2 représentations comme octale et hexadécimale pour lire la représentation binaire de manière plus efficace et indolore.

Maintenant, exemple du programmeur moyen qui doit comprendre la puissance de 2 représentations:

  1. ASCII
  2. Unicode
  3. Comprendre la programmation de la gestion de la mémoire (pile, tas, adresses mémoire, vidages mémoire)
  4. Débogage
  5. La lecture des données binaires se fait principalement dans l'éditeur Hex.

Maintenant mes deux derniers cents, je suis très confiant que vous pouvez apprendre assez rapidement n'importe quelle puissance de 2 représentations (puisque vous avez déjà géré des cours de programmation d'introduction). Vous pourriez oublier la conversion, mais ce ne devrait pas être un concept étranger si vous le souhaitez être un programmeur moyen.

Armando
la source
3

Je n'ai jamais utilisé octal mais il n'est pas rare de voir hex dans le débogueur et à l'occasion, il est beaucoup plus logique d'utiliser hex dans votre code source (normalement, car les données sous-jacentes sont des indicateurs de bits.)

Loren Pechtel
la source
3

Je ne sais pas s'il y a beaucoup de besoins de nos jours, mais il y a de nombreuses années, quand j'étais programmeur système, il était essentiel de pouvoir lire et comprendre hex. Je serais présenté avec un vidage de stockage (tout en hexadécimal) et décoder la représentation hexadécimale en langage IBM Assembly. Après avoir fait cela pendant un certain temps, vous finissez par pouvoir le faire directement - lisez l'hex et écrivez l'équivalent d'assemblage. Très pratique pour le débogage. L'ajout et la soustraction de valeurs hexadécimales ont été utiles pour calculer les décalages à partir des registres de base.

Je soupçonne qu'il est peu nécessaire dans la pratique maintenant, mais sa connaissance peut difficilement être une mauvaise chose.

Simon Knights
la source
C'est là que j'ai également acquis mes compétences hexagonales. Plus tard, aiguisé quand j'ai été forcé de déboguer du code sans débogueur symbolique sur VAX / VMS (nous avons expédié le code aux clients sans aucune information de symbole). De nos jours, je l'utilise rarement, bien que nous encodions certaines informations dans certaines URL en hexadécimal, et de temps en temps, il est utile de pouvoir les décoder à la volée.
TomG
3

Il ne s'agit pas d'être «fluide» en lecture binaire / hexadécimal, mais suffisamment confortable pour que vous puissiez rapidement faire une conversion mentale lorsque vous les rencontrez. Imaginez la programmation sans être à l'aise avec l'arithmétique simple, et vous deviez aller à une calculatrice chaque fois que vous deviez multiplier par deux.

Hexadécimal / binaire est important car c'est le langage dans lequel les ordinateurs parlent. Vous le rencontrerez invariablement à certains endroits, en particulier lors des exercices de débogage et vos données sont en hexadécimal.

Je voudrais également souligner l'importance de comprendre la base 2 dans le contexte de la façon dont les différents types numériques sont représentés en interne et comment fonctionne l'arithmétique. Avec cela, vous aurez une meilleure compréhension du moment et de la manière de traiter les problèmes d'arrondi en virgule flottante et le dépassement d'entier, par exemple.

Comme exemple de plus, les opérations au niveau du bit et les indicateurs de bit sont toujours répandus dans la programmation, et c'est un autre endroit où la compréhension de la base-2 est importante.

Scott Wegner
la source
2

Vraiment, la seule fois où j'ai vu autre chose que la base 10, c'est pour les couleurs en CSS,

Vous n'avez jamais eu à rechercher un caractère dans les tableaux de code Unicode ? Vous n'avez jamais vu d'URL qui s'y trouvait %20? Vous n'avez jamais utilisé de GUID ? Vous n'avez jamais vu d' adresse IPv6 ? Jamais écrit un BLOBlittéral en SQL? Jamais consulté un fichier dans un éditeur hexadécimal? Il y a beaucoup de choses liées à l'ordinateur qui sont notées de manière conventuelle en hexadécimal.

Quant à octal, il est rare de nos jours, mais toujours utilisé pour les autorisations du système de fichiers Unix.

Voir aussi: applications pratiques des opérations au niveau du bit

Même si vous êtes en mesure d'éviter de faire une programmation "proche du fil", il est toujours important d'être conscient du fait que les ordinateurs fonctionnent en binaire, pour une raison simple: la fuite des abstractions .

L' intabstraction dans la plupart des langues fuit sa nature à largeur fixe. Les entiers débordent, et ils le font à des nombres binaires "ronds" comme 2 31 . Un penseur décimal ne serait pas en mesure d'expliquer le bogue de l' année 2038 .

L' abstraction float/ doublefuit sa radix de 2. Si vous écrivez 0.1, vous obtenez vraiment 0.1000000000000000055511151231257827021181583404541015625. Et vous obtiendrez des bogues si vous vous attendiez à un 0,1 exact.

dan04
la source
2

Reconnaître des nombres particuliers dont les modèles sont simples dans d'autres bases est souvent un indice énorme lors de la résolution de bogues. Si votre réponse est fausse en 347, cela ne signifie peut-être rien, mais si elle est désactivée en 256 ou 128, cela signifie peut-être quelque chose. Si vous mettez -1 dans un type de données 16 bits non signé, vous obtenez 65535, soit 1 de moins que 65536. Si vous connaissez par hasard 2 ^ 16, vous repérez immédiatement votre problème.

Quant à octal, jetez un oeil à ces questions et voyez si reconnaître l'octal lorsque vous le demandez accidentellement aurait fait de ces personnes de meilleurs programmeurs.

Kate Gregory
la source
1

Il existe des techniques mathématiques et de compression de données très efficaces que vous pouvez utiliser lorsque vous comprenez ces systèmes et comment ils fonctionnent. Vous ne les utiliserez probablement pas beaucoup dans vos premiers travaux. Mais les avoir dans votre poche arrière lorsque vous devenez un senior et qu'on vous demande de faire fonctionner le système hérité surmené sur le serveur de dinosaures surmené sous-alimenté est agréable à avoir.
Cela devient plus important lorsque vous traitez avec des contrôleurs et des appareils électroniques qui n'ont pas d'API. Surtout si vous écrivez cette API.

SoylentGray
la source
1

En introduction aux cours de programmation qui font partie des études en informatique, il est très logique de bien connaître ce matériel. Vous revisitez le sujet lors de la programmation en langage assembleur, lors de la conception de matériel, en suivant un cours sur les langages formels, etc. Tous les ingénieurs électriciens de mon université ont besoin d'un cours d'introduction à la programmation et ils continueront probablement à utiliser ces informations. En dehors de cela, pas terriblement important.

Peter Smith
la source
1

Les nombres octaux sont parfois utiles pour les jeux de caractères. Ces derniers sont basés sur des octets et un octal = 8 bits = un octet. En UTF-8, par exemple, les caractères non ASCII peuvent avoir deux octets ou plus; les nombres octaux sont plus pratiques pour les représenter que les nombres hexadécimaux.

Les bits sont utiles parce que ... hé! Vous savez que votre ordinateur traite constamment des 0 et des 1, n'est-ce pas? Je veux dire sérieusement ... Il ne s'agit pas simplement de pouvoir plaisanter que les informaticiens sont les seuls à savoir que 1 + 1 = 10. Il est également utile pour les opérateurs liés aux bits ou comme varbits. Ces derniers permettent de réduire les besoins de stockage dans les bases de données lorsqu'il s'agit de séries de drapeaux.

En ce qui concerne l'hexadécimal, je suppose que vous n'avez jamais ouvert d'éditeur hexadécimal pour augmenter les statistiques et l'équipement de votre personnage RPG. Si vous l'aviez fait au lieu de télécharger un éditeur de caractères, vous sauriez très bien pourquoi il est pratique de pouvoir comprendre les nombres hexadécimaux. ;-)

Denis de Bernardy
la source
Je pense que vous voulez dire "octet", pas "octal". Un chiffre octal fait trois bits. L'utilisation de constantes octales pour les caractères non ASCII est un maintien des premiers jours de C, qui a été développé sur un PDP-11, qui utilisait une représentation octale dans la plupart de la documentation (voir cette carte de référence PDP-11 ).
TMN
Je pourrais être. L'anglais n'est pas ma langue maternelle. :-)
Denis de Bernardy
1

J'ai obtenu mon diplôme universitaire il y a 3 ans, et je pense qu'il est très important de pouvoir lire et écrire des nombres hexadécimaux. Je joue avec beaucoup de gros fichiers XML pour le travail (gros sens 100 Mo +). Parfois, vous obtiendrez un fichier XML contenant un caractère XML non valide, qui ne peut être affiché dans aucun éditeur de texte, j'ai donc dû utiliser l'éditeur Hex et écrire du code pour localiser les caractères non valides. Cette tâche serait très difficile sans connaître le nombre hexadécimal.

Alvin
la source
1

Il y a de nombreuses années, j'ai appris la valeur de l'hex en travaillant sur des systèmes 8 bits.

La clarté de comprendre que quelque chose se trouvait au B000 ou E7FF était incroyable.

Hier, j'avais besoin de savoir exactement quels étaient les caractères à la fin d'une ligne de texte. Connaître la différence entre 0x0A et 0x0A 0x0D peut être très important.

Scott Bruns
la source
1

Quelqu'un at-il un bon exemple de l'endroit où le programmeur moyen utiliserait réellement un nombre octal?

Octal ces jours-ci est assez rare, mais j'utilise hex fréquemment, et je pense souvent aux problèmes en binaire.

Je programme principalement en C et C ++, avec un peu d'Objective C, et je fais beaucoup de travail avec des graphiques raster et vectoriels sous Linux et Mac OS X. Dans ces domaines, il est primordial d'écrire du code qui fonctionne efficacement et fait bon usage du stockage. Vous devez également comprendre la façon dont les machines représentent en interne ce avec quoi vous travaillez. La façon la plus pratique de voir cela est en hexadécimal. Par exemple, un pixel couleur standard de 24 bits est représenté sur trois octets, et savoir en un coup d'œil que 0x000000 est noir, 0x00FF00 est rouge et 0x008000 est rose est vraiment, vraiment utile!

Je travaille également beaucoup avec les normes internationales pour les formats de fichiers. L'un de ceux avec lesquels j'ai travaillé récemment est MXF, qui est utilisé pour stocker des vidéos pour la diffusion, des DVD, etc. C'est un format binaire, et encore une fois, il est plus facile à gérer en utilisant hexadécimal ou parfois binaire. Lorsque vous déboguez la raison pour laquelle certaines vidéos basées sur MXF ne sont pas lues directement sur votre système, il est vraiment pratique de pouvoir regarder un champ 32 bits et de réaliser que le bit pour masquer l'écran est défini par inadvertance - et vous pouvez le faire que dans l'hex, mais c'est à peu près impossible en base 10.

Si vous allez passer votre carrière à écrire du Perl pour masser des chaînes de texte, alors non, vous n'avez probablement pas besoin d'être très familier avec l'hex, l'octal ou le binaire. Mais au moment où vous commencez à traiter le genre de choses que je fais, hexadécimal et binaire au moins sont essentiels.

Bob Murphy
la source
0

Vous devez savoir hexadécimal si vous voulez être programmeur. Il serait tout simplement trop gênant pour vous d'avoir à admettre au travail le rare jour où vous devez le savoir que vous ne le comprenez pas.

Cela ne signifie pas que vous devez être capable d'ajouter des nombres hexadécimaux dans votre tête. Cela commence à vous gâcher les règles de l'ajout régulier si vous le faites de toute façon. :)

John Robertson
la source
0

Ce que le binaire, l'hex et l'octal ont en commun n'est pas qu'ils ne sont pas en base10, mais qu'ils sont tous des pouvoirs de deux. Étant donné que les ordinateurs sont intrinsèquement binaires, cela donne à chacun d'eux une application où ils sont le moyen le plus approprié ou le plus efficace pour afficher et traiter les données.

Cela était très important, à l'époque où toute la programmation était de bas niveau. Dans la programmation de haut niveau, aujourd'hui, les systèmes de puissance à 2 sont beaucoup moins importants. Avoir une introduction approfondie à eux dans chaque cours de programmation pourrait être une relique de l'ancien temps.

Mais ces systèmes numériques ont toujours leur utilité, même lorsque vous travaillez dans des langues de haut niveau. La couleur, par exemple, est toujours stockée en 24 bits, 8 bits par couleur primaire. Et comme l'hexadécimal est le meilleur moyen de représenter un octet de manière lisible par l'homme, il fait même partie du CSS, qui est censé être utilisable par des personnes qui n'ont jamais eu d'initiation à la programmation.

Vous ne pouvez pas comprendre les ordinateurs sans comprendre le binaire. Une introduction au binaire est une partie nécessaire de toute introduction approfondie à la programmation. Vous n'avez peut-être pas besoin de faire beaucoup de conversions entre les systèmes numériques dans le travail quotidien, mais faire des exercices comme celui-ci est le seul moyen de vous familiariser avec ces systèmes numériques *. Connaître plus d'un système non basé sur 10 numéros est le seul moyen de bien comprendre que les données peuvent être représentées de plusieurs manières, toutes valides.

  • Comme l'a dit John von Neumann: "[..] nous ne comprenons pas les choses, nous nous y habituons."
Waquo
la source
0

Je pense que la conversion en tant que telle d'une base à une autre n'est pas très importante pour la programmation. En programmation de haut niveau, vous n'avez pas besoin des conversions (et vous pourriez le faire, les fonctions lib et la calculatrice sont disponibles.) Lorsque vous plongez dans la programmation de niveau inférieur, vous n'êtes plus dans un cours d'introduction.

Je pense que deux questions (liées) sont importantes à couvrir dans un cours de base.

  1. À propos de l'encodage. Il ne s'agit pas de conversion mathématique, mais d'utiliser des nombres (tout type de nombres) pour stocker des informations (tout type d'informations). Vous pouvez illustrer cela avec du code morse ou peindre par des nombres, si vous le souhaitez. Mais comme les ordinateurs utilisent plutôt le binaire et que le binaire est généralement affiché sous forme hexadécimale, les choses sont généralement illustrées par des exemples hexy. (Et, pendant qu'ils y sont, ils pourraient expliquer un peu les fins de ligne, qui ont été mentionnées dans cette rubrique. Je ne conseillerais que de reconnaître les diverses formes et formes que cela pourrait prendre, certaines d'entre elles sont 0x0D, 0x0A , CRLF, '\ n' et '\ r')

  2. Problèmes de débordement. Encore une fois, il n'est pas nécessaire d'illustrer cela avec hex. Vous pouvez utiliser l'exemple y2k (qui n'a rien à voir avec l'hexagone). Ici aussi, je conseillerais simplement de reconnaître les différents indicateurs les plus probables (255, 32767, 65535, 2M14). Pourquoi ce sont des indicateurs est directement lié à la nature bytewise de stockage interne, mais la conversion n'est pas la partie importante.

Je ne suis pas d'accord sur le fait que vous devez le savoir pour les bitflags (car dans un cours d'introduction à la programmation, les constantes nommées sont beaucoup plus instructives et utiles.)

Inca
la source
0

Si vous entrez dans la programmation intégrée de bas niveau, vous utiliserez hexadécimal. Il est utilisé pour des choses comme la spécification de modèles de bits dans les registres matériels et les valeurs d'octets dans les vidages de mémoire. Vous apprendrez également à utiliser chaque opérateur bit par bit dans le langage de programmation que vous utilisez.

mkClark
la source