Beim Schreiben von C-Dateien in VS-Code habe ich eine Datei zuerst.c.cpp genannt. Nach Abschluss des Programms sind bei der Ausführung Fehler aufgetreten. Nach 30 Minuten Fehlerbehebung entdeckte ich, dass das Problem im Dateinamen lag:
Die Erweiterung .c führte dazu, dass die IDE es fälschlicherweise als C-Programm identifizierte, was dazu führte, dass VS Code gcc (den C-Compiler) anstelle von g (den C-Compiler) verwendete, um meinen Code zu kompilieren.
Bildunterschrift: Wie dumm!
Die Designphilosophie von Java unterscheidet sich erheblich von herkömmlichen kompilierten Sprachen:
Dieses Design erreicht das Ziel „Einmal schreiben, überall ausführen“, wohingegen ausführbare C-Dateien (.exe-Dateien) auf die Ausführung auf einer einzigen Plattform beschränkt sind.
Vorteile: Das gleiche Programm kann ohne Änderung auf verschiedenen Computern ausgeführt werden
Nachteile: Der zusätzliche Schritt im Prozess kann die Kompilierung im Vergleich zu herkömmlichen Methoden etwas langsamer machen
Einmal schreiben, überall ausführen
---------James Gosling
Little Endian: Das niedrigstwertige Byte wird an der niedrigsten Adresse gespeichert. Diese Speichermethode wurde entwickelt, um das Lesen des CPU-Speichers zu erleichtern, das von niedrigen zu hohen Adressen erfolgt. Interessanterweise ist dies das Gegenteil davon, wie Menschen normalerweise Zahlen schreiben.
Zum Beispiel:
Die binäre Darstellung von 329933 ist 00000000 00000101 00001000 11001101
Little-Endian-Speicher: 11001101 00001000 00000101 00000000
Wie wir sehen können, kehrt Little Endian die Reihenfolge der Bytes in der Binärdarstellung um. Es ist jedoch wichtig zu beachten, dass die Bitreihenfolge innerhalb jedes Bytes unverändert bleibt!
# includeAusgabe:int main() { int a; int *p; a=329933; p=&a; char *q; q=(char*)p; printf("%d\n",*p); printf("%d\n",*q); }
# includeint main() { int a; int *p; a=329933; p=&a; char *q; q=(char*)p; printf("%d\n",*p); printf("%d\n",*q); }
Ich bin neugierig, warum es -51 ausgibt?
ErläuterungIst das ein Zufall? Versuchen wir es mit zwei weiteren Beispielen
# includeint main() { int a; int *p; a=329933; p=&a; char *q; q=(char*)p; printf("%d\n",*p); printf("%d\n",*q); }
Probieren Sie es aus:
Die 1 ganz links stellt das negative Vorzeichen dar und zeigt an, dass es sich um eine negative Zahl handelt. Nach Anwendung des Zweierkomplements erhalten wir: 0110011 (die letzten 7 Bits)
(Hinweis: Bei positiven Zahlen ist das Zweierkomplement einfach die binäre Darstellung der Dezimalzahl. Bei negativen Zahlen wird das Zweierkomplement durch Invertieren aller Bits außer dem ganz linken (höchsten) Bit und anschließendes Addieren von 1 erhalten ganz rechts.)
Die Umrechnung in eine Dezimalzahl ergibt -51. Interessant, oder?Vorteile des Zweierkomplements:
Viele Leute fragen sich, warum es -128 ist. Wenn Sie die Antwort kennen, können Sie sie gerne im Kommentarbereich teilen. Dies wird nicht nur anderen helfen, sondern auch Ihnen helfen, Ihre Gedanken zu ordnen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3