Computers

Computerprogrammier-Tutorial - Fortgeschrittenes C-Like

Autor: Laura McKinney
Erstelldatum: 3 April 2021
Aktualisierungsdatum: 14 Kann 2024
Anonim
Rubik’s Cube: Advanced Cross Tutorial
Video: Rubik’s Cube: Advanced Cross Tutorial

Inhalt

Charles ist ein Software-Ingenieur und College-Professor, der sich für Technologie, Medizin, Wirtschaft und Ernährung interessiert.

Alle Rätsel lösen

Du bist ein Programmierer der Mittelstufe. Wenn dies nicht der Fall ist, lesen Sie diesen einleitenden Artikel oder diesen Zwischenartikel, bevor Sie fortfahren.

Jetzt sind Sie ein Programmierer der Mittelstufe und möchten Ihre Fähigkeiten auf Expertenebene verbessern. Dieser Artikel wird Ihnen dabei helfen, den Weg zu weisen. In früheren Artikeln dieser Reihe wurden die für die meisten Programmiervorgänge erforderlichen Fähigkeiten behandelt, wobei Datenstrukturen, Algorithmen und einige seltene Variablentypen weggelassen wurden. Ein erfahrener Programmierer ist sich all dieser Dinge bewusst, auch wenn sie fast immer ungenutzt bleiben.

Lass uns anfangen.

Alle Variablen

  • Boolescher Wert - EIN Boolescher Wert Wert kann wahr oder falsch sein. Im traditionellen C, Boolescher Wert Werte werden durch dargestellt ints Einige Varianten (einschließlich C ab C99) haben jedoch einen dedizierten Typ namens "bool" oder "boolean".
  • verkohlen - Im vorherigen Artikel habe ich vorgestellt verkohlen als eine Möglichkeit zu speichern Zeichenfolges. Sie sind auch eine Art von int, nur halb so groß wie ein kurz.
  • lang Lang - EIN lang Lang, oder "lange lange ganze Zahl" ist wie eine int aber größer. Das bedeutet, dass es einen größeren Wertebereich speichern kann, mehr Speicher im RAM oder in einer Datei beansprucht und wahrscheinlich mehr Zeit für die Verarbeitung benötigt. Zwei hinzufügen lang Langs kann länger dauern als das Hinzufügen von zwei ints, aber wie lange hängt noch von Ihrer Hardware ab.
  • langes Doppel - EIN langes Doppel ist wie ein doppelt, aber größer.

Im letzten Artikel habe ich erwähnt Epsilon und wie oft Sie sich darüber keine Sorgen machen müssen. Wenn Sie anfangen, Probleme anzugehen, die erforderlich sind langes Doppels, du machst dir wahrscheinlich Sorgen Epsilon und Rundungsfehler.


Es ist ein kompliziertes Problem, und dies ist ein fortgeschrittener Artikel, aber eine gute Erklärung finden Sie in dieser Referenz. Kurz gesagt, Gleitkommazahlen haben eine begrenzte Anzahl von Ziffern. Wenn sie also groß genug werden, entspricht das Hinzufügen von Eins dem Hinzufügen von Null.

ModellnameGröße in BytesReichweite

Boolescher Wert

4

wahr falsch

verkohlen

1

+/- 127 (2^7 - 1)

lang Lang

8

+/- 2^63 -1

langes Doppel

10 bis 16

+/- 1.18e4932

enum boolean {false, true};

Weitere Ganzzahlen mit Aufzählungstypen

Ein Aufzählung oder "Aufzählungstyp" ermöglicht es Ihnen, eine Reihe von zu definieren int Konstanten, die das Lesen Ihres Programms erleichtern. Die erste Konstante in der Liste ist 0, die nächste ist 1 und so weiter.

Vergiss nicht, dass sie es sind ints. In dem Boolescher Wert Beispiel rechts: false ist 0 und true ist 1. "if (false)" und "if (true)" funktionieren also wie erwartet, aber "if (true == (expression))" ist nicht dasselbe wie "if (") Ausdruck) ", weil in C jeder ganzzahlige Wert ungleich Null wahr ist, obwohl Sie eine aufgerufene Aufzählung definiert haben Boolescher Wert wo wahr ist immer 1.


Ändern von Variablen mit Const Extern Static

Const, extern, und statisch kann verwendet werden, um eine Variable auf verschiedene Arten zu ändern.

Eine Variable, die als deklariert ist const ist eine Konstante, was bedeutet, dass sich ihr Wert niemals ändern kann.

Eine Variable, die als deklariert ist extern wird zwischen Quelldateien geteilt.

Eine Variable, die als deklariert ist statisch Innerhalb einer Funktion bleibt der Wert zwischen den Funktionsaufrufen erhalten. Es ist wie eine globale Variable, auf die nur innerhalb dieser Funktion zugegriffen werden kann.

typedef struct BigIntegerStruct {bool negative; char * data; int dataLength; } BigIntegerType; BigIntegerType createBigInteger (int length); BigIntegerType destroyBigInteger (int length); BigIntegerType addBigInteger (BigIntegerType a, BigIntegerType b); BigIntegerType subtractBigInteger (BigIntegerType a, BigIntegerType b);

Die Grenzen ausreizen

Was ist, wenn Sie die Grenzen überschreiten möchten? Vielleicht braucht Ihr Programm sehr viel ints oder sehr genau schwebens. Sie können mit einen neuen Datentyp erstellen struct. College-Programmierkurse geben häufig eine solche Aufgabe in den ersten ein oder zwei Jahren: Schreiben Sie eine Reihe von Funktionen und Datenstrukturen, um Operationen mit sehr großen ganzen Zahlen (Hunderte von Ziffern) zu unterstützen.


Um dies zu erreichen, kann ein Schüler a definieren struct BigIntegerStruct und machen Sie es zu einem neuen Typ BigIntegerType mit typedef. In der Praxis müssen BigIntegerStruct und BigIntegerType keine unterschiedlichen Namen sein, und Sie können beide BigInteger nennen: typedef struct BigInteger {...} BigInteger;

Durch das Definieren der üblichen Ganzzahloperationen für diesen neuen Typ kann ein Programmierer das größere Puzzle in kleinere Teile zerlegen, die jeweils leichter zu lösen und zu testen sind als das Ganze. Gleichzeitig werden die Schüler mit der Idee eines Algorithmus (einer Reihe von Schritten, die schließlich ein Rätsel lösen) und der Analyse der Reihenfolge seiner Laufzeit in Bezug auf seine Eingaben vertraut gemacht. Bei großen Ganzzahlen dauert das Addieren und Subtrahieren genauso lange wie die Länge ihrer Eingaben oder O (n). Das Multiplizieren und Dividieren würde genauso viel Zeit in Anspruch nehmen wie das Produkt aus der Länge ihrer Eingaben oder O (n2).

Dezimalhexadezimal

0

0x0

1..8

0x1..0x8

9

0x9

10

0xA

11

0xB

12

0xC

13

0xD

14

0xE

15

0xF

Operation XOR

EingangEingangAusgabe

0

0

0

0

1

1

1

0

1

1

1

0

Ganzzahlige Operationen

Bisher war Ihnen wahrscheinlich bewusst, dass C-Datentypen jeweils eine Reihe von einem oder mehreren Bytes sind und dass Bytes jeweils acht Bits sind und dass jedes Bit 0 oder 1 ist. Mit C können Sie diese Bits direkt bearbeiten und testen. Um dies zu unterstützen, können Sie ganzzahlige Werte mit einem führenden 0x definieren, um einen Hexadezimalwert anzugeben, und% x oder% X in der Formatzeichenfolge printf () verwenden, um eine anzuzeigen int in der Basis 16.

Es gelten weiterhin die üblichen Operatoren: + - * / % und erinnern Sie sich an die Tests == > >= =. Das Testen einer Ganzzahl selbst ist falsch, wenn die Ganzzahl 0 ist, und andernfalls wahr.

Fügen Sie diesen Operatoren hinzu: & (UND), | (ODER), ^(XOR) und der Unäre ~(NICHT), wodurch alle 1s zu 0s und 0s zu 1s werden. Das bitweise UND und ODER funktionieren genau wie ihre logischen Gegenstücke, behandeln jedoch jede Ganzzahl als ein Array von Booleschen Werten. XOR (exklusives ODER) ist nur wahr, wenn genau einer seiner beiden Eingänge wahr ist. Das ist 1^0 und 0^1 sind beide wahr (1) und 1^1 und 0^0 sind beide falsch (0).

Sie können auch Bits nach rechts verschieben () und links () innerhalb einer ganzen Zahl. Das Bild oben in diesem Artikel zeigt eine Verschiebung der Aktion nach rechts.

Mit diesen Operationen können Sie eine behandeln int (x) als Array von 32 Bits und Testbit n (0-31) mit:

  • if (x & (1n))

Warum willst du das tun? Meistens würden Sie nicht wollen. Zum Beispiel haben Sie sich vielleicht gefragt, warum ein C99-Standard Boolescher Wert Wert nimmt so viel wie ein int (vier Bytes oder 32 Bits) wenn Boolescher Wert Daten sind nur ein Bit wert. Der Grund ist die Geschwindigkeit. Bis Ihnen der Arbeitsspeicher ausgeht, ist die Geschwindigkeit wichtiger als der Arbeitsspeicher und die Überprüfung des Werts von a int ist normalerweise schneller als ein Bit zu isolieren und dann seinen Wert zu überprüfen.

Aber nicht immer. Wenn Ihr Programm genug braucht Boolescher Wert Werte und muss zufällig darauf zugreifen, schließlich verschiebt der Engpass Daten, anstatt Daten zu verarbeiten. Selbst in Fällen, in denen es besser ist, ein Bit pro Bit zu verwenden Boolescher WertEs ist fast immer nicht wichtig und es ist einfacher, nur eine zu verwenden int.

Dieser Punkt über die Einfachheit ist hervorzuheben. Einfachheit gewinnt. Wenn Sie ein Expertenwissen erreichen, geben Sie es nicht so schnell wie möglich aus. Mach es auf die langweilige Art und Weise. Machen Sie es auf die langweilige Art und Weise, bis ein Expertenwissen erforderlich ist, da keine der langweiligen Optionen gut genug ist.

Zukünftige Richtungen

In diesen drei Artikeln habe ich versucht, C-ähnliche Sprachen als ähnlicher als unterschiedlich zu behandeln, aber die eigentliche Programmierung erfolgt in einer tatsächlichen Sprache mit all ihren Stärken und Schwächen.

Um weitere Fähigkeiten zu erlangen, muss ein Programmierer trotz aller Ähnlichkeiten Sprachunterschiede schätzen. C ist immer noch das Latein des modernen Rechnens, aber die Renaissance ist in vollem Gange und wichtige Wissenschaftler studieren Französisch, Italienisch, Spanisch, Englisch, Deutsch, wobei jeder seinen eigenen Zweck hat, ob diese Ziele erreicht werden oder nicht.

Wenn Sie sich für Ihre nächste Mission entscheiden, diese zu akzeptieren, konzentrieren Sie sich jeweils auf eine Sprache (wie C). Es kann sich um die Sprache handeln, die Sie für ein bestimmtes Projekt verwenden müssen, oder um eine Sprache, deren Redewendungen Sie emulieren möchten, oder einfach um eine Sprache, die Sie um des Interesses willen interessiert.

Egal für welchen Weg Sie sich hier entscheiden, Sie sind bereits auf dem besten Weg, die rund 10.000 Übungsstunden zu verbringen, die erforderlich sind, um ein Weltklasse-Experte zu sein.

Dieser Artikel ist genau und nach bestem Wissen des Autors. Der Inhalt dient nur zu Informations- oder Unterhaltungszwecken und ersetzt nicht die persönliche Beratung oder professionelle Beratung in geschäftlichen, finanziellen, rechtlichen oder technischen Angelegenheiten.

Neue Publikationen.

Faszinierend

Test des Mpow H21 Hybrid-Kopfhörers mit Geräuschunterdrückung
Computers

Test des Mpow H21 Hybrid-Kopfhörers mit Geräuschunterdrückung

Walter hillington chreibt über Produkte, die er au er ter Hand kennt. eine Artikel konzentrieren ich auf Ge undheit we en, Elektronik, Uhren und Hau halt gegen tände.Vor einigen Jahren habe ...
So richten Sie einen Radius-Server unter pfSense mit dem FreeRadius2-Paket ein
Internet

So richten Sie einen Radius-Server unter pfSense mit dem FreeRadius2-Paket ein

am arbeitet al Netzwerkanaly t für eine algorithmi che Handel firma. Er erhielt einen Bachelor-Ab chlu in Information technologie von UMKC.In die em Artikel werde ich den Proze de Einrichten ein...