Maison >interface Web >js tutoriel >Blog hebdomadaire : quatre choses intéressantes que j'ai rencontrées cette semaine
Lors de l'écriture de fichiers C++ dans VS Code, j'ai nommé un fichier en premier.c.cpp. Après avoir terminé le programme, j'ai rencontré des erreurs lors de l'exécution. Après 30 minutes de dépannage, j'ai découvert que le problème résidait dans le nom du fichier :
L'extension .c a conduit l'EDI à l'identifier par erreur comme un programme C, ce qui a amené VS Code à utiliser gcc (le compilateur C) au lieu de g++ (le compilateur C++) pour compiler mon code.
Légende : Quel imbécile !
La philosophie de conception de Java diffère considérablement des langages compilés traditionnels :
Cette conception atteint l'objectif « Écrire une fois, exécuter n'importe où », alors que les exécutables C++ (fichiers .exe) sont limités à une exécution sur une seule plate-forme.
Avantages :Le même programme peut s'exécuter sur différents ordinateurs sans modification
Inconvénients : L'étape supplémentaire dans le processus peut rendre la compilation légèrement plus lente par rapport aux méthodes traditionnelles
Écrivez une fois, exécutez n'importe où
---------James Gosling
Little Endian : L'octet de poids faible est stocké à l'adresse la plus basse. Cette méthode de stockage est apparue pour faciliter la lecture de la mémoire du processeur, qui s'effectue des adresses basses aux adresses élevées. Il est intéressant de noter que cela est contraire à la façon dont les humains écrivent généralement des nombres.
Par exemple :
La représentation binaire de 329933 est 00000000 00000101 00001000 11001101
Stockage Little Endian : 11001101 00001000 00000101 00000000
Comme nous pouvons le voir, Little Endian inverse l'ordre des octets dans la représentation binaire. Cependant, il est crucial de noter que l'ordre des bits dans chaque octet reste inchangé !
Mon expérience préférée pour introduire le casting de caractères !
# include 317e6b6395ab75e70e7f0880af8f6835 int main() { int a; int *p; a=329933; p=&a; char *q; q=(char*)p; printf("%d\n",*p); printf("%d\n",*q); }
Sortie :
329933 -51
Je suis curieux de savoir pourquoi il affiche -51 ?
Est-ce une coïncidence ? Essayons deux autres exemples
printf("%d\n",*(q+1)); printf("%d\n",*(q+2));
Essayez-le :
Lors de la conversion de type forcée, (char)p pointera vers l'adresse du premier octet de l'entier de quatre octets, qui est 11001101.
Le 1 le plus à gauche représente le signe négatif, indiquant qu’il s’agit d’un nombre négatif. Après avoir appliqué le complément à deux, on obtient : 0110011 (les 7 derniers bits)
(Remarque : pour les nombres positifs, le complément à deux est simplement la représentation binaire du nombre décimal. Pour les nombres négatifs, le complément à deux est obtenu en inversant tous les bits sauf le bit le plus à gauche (le plus élevé), puis en ajoutant 1. à l'extrême droite.)
La conversion en décimal nous donne -51. Intéressant, non ?
Beaucoup de gens se demandent pourquoi il fait -128. Si vous connaissez la réponse, n'hésitez pas à la partager dans la section commentaires. Cela aidera non seulement les autres, mais vous aidera également à organiser vos pensées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!