Maison >interface Web >js tutoriel >Blog hebdomadaire : quatre choses intéressantes que j'ai rencontrées cette semaine

Blog hebdomadaire : quatre choses intéressantes que j'ai rencontrées cette semaine

王林
王林original
2024-09-08 20:35:03711parcourir

1. Éviter les noms de fichiers confus dans VS Code

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.

Weekly Blog: Four Interesting Things I Encountered This Week

Légende : Quel imbécile !

  • Solution : Dans le fichier tâches.json, modifiez la ligne 'commande' de gcc en g++.
  • Leçon apprise : utilisez des extensions .cpp claires pour les fichiers C++ afin d'éviter toute confusion inutile.

2. La philosophie de conception multiplateforme de Java

La philosophie de conception de Java diffère considérablement des langages compilés traditionnels :

Compilation traditionnelle :

  1. Les langages comme C++ se compilent directement en code machine pour des besoins spécifiques plates-formes (par exemple, Windows, Mac, Linux)
  2. Les fichiers exécutables résultants (.exe) ne peuvent s'exécuter que sur la plateforme cible

L'approche de Java :

  1. Le compilateur génère du code intermédiaire (bytecode)
  2. Ce bytecode peut s'exécuter sur n'importe quelle plateforme avec une machine virtuelle Java (JVM) installée
  3. La JVM est chargée de traduire le bytecode en code machine pour la plateforme actuelle

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

3. Deux modes de compilation courants

  • Le mode Debug est orienté vers le débogage, avec moins d'optimisations. Il est principalement utilisé pour le débogage des programmes.
  • Le mode Release est principalement utilisé pour générer la version release, en se concentrant sur l'optimisation et en ne conservant que les fonctionnalités de débogage de base.

Weekly Blog: Four Interesting Things I Encountered This Week

4. Comprendre le casting de type forcé d'un point de vue de bas niveau

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é !

Un jeu amusant pour comprendre le casting de type forcé

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 ?

Explication

  1. (char*)&a pointe vers le premier octet de l'int. Le premier octet 11001101 est interprété comme un caractère.
  2. Le bit le plus élevé 1 indique un nombre négatif, après conversion du complément à deux, nous obtenons -51 (les amis qui connaissent le complément à deux peuvent vérifier s'il représente bien -51)

Est-ce une coïncidence ? Essayons deux autres exemples

printf("%d\n",*(q+1));
printf("%d\n",*(q+2));

Essayez-le :

  1. Essayez d'exécuter le code mentionné ci-dessus et observez le résultat.
  2. Considérez pourquoi les deuxième et troisième octets produisent un tel résultat. N'hésitez pas à en discuter dans la section commentaires.
  3. Pouvez-vous appliquer une conversion de type forcée à d'autres types de données ? Essayez-le !

Informations supplémentaires : complément à deux

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 ?

Avantages du complément à deux :

  1. Il permet de calculer des types positifs et entiers en utilisant uniquement un additionneur, éliminant ainsi le besoin d'un soustracteur et simplifiant les besoins matériels.
  2. Il fournit une représentation binaire unique pour zéro. 10000000 ne représente pas -0, mais -128, tandis que 00000000 représente 0, pas +0.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn