"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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

Publié le 2024-11-08
Parcourir:685

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 Tasks.json, remplacez la ligne de commande de gcc par 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. Des langages comme C se compilent directement en code machine pour des tâches 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 plate-forme sur laquelle une machine virtuelle Java (JVM) est 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 finale, 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 
int main()

{
    int a;

    int *p;

    a=329933;

    p=&a;

    char *q;

    q=(char*)p;

    printf("%d\n",*p);

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

}

Sortir:

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 :

  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 une telle sortie. 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 vers le bit le plus à 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.

Déclaration de sortie Cet article est reproduit sur : https://dev.to/stockdale_roger_999e292a7/weekly-blog-four-interesting-things-i-encountered-this-week-eo9?1 En cas de violation, veuillez contacter [email protected] pour le supprimer
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3