Computerwissenschaften

C Tutorial zum Umgang mit Floats und Ints

01 von 08

Alles über Zahlen in C ++

In C ++ gibt es zwei Arten von Zahlen. Ints und schwimmt. Es gibt auch Varianten dieser Typen, die größere Zahlen oder nur vorzeichenlose Zahlen enthalten, aber immer noch Ints oder Floats sind.

Ein int ist eine ganze Zahl wie 47 ohne Dezimalpunkt. Sie können nicht 4,5 Babys haben oder 32,9 Mal schleifen. Sie können 25,76 $ haben, wenn Sie einen Float verwenden. Wenn Sie also Ihr Programm erstellen, müssen Sie entscheiden, welchen Typ Sie verwenden möchten.

Warum nicht einfach Floats verwenden?

Dies ist, was einige Skriptsprachen tun? Da Floats ineffizient sind, beanspruchen sie mehr Speicher und sind im Allgemeinen langsamer als Ints. Außerdem können Sie zwei Floats nicht einfach vergleichen, um festzustellen, ob sie mit Ints gleich sind.

Um Zahlen zu manipulieren, müssen Sie sie im Speicher speichern. Da der Wert leicht geändert werden kann, wird er als Variable bezeichnet.

Der Compiler. der Ihr Programm liest und in Maschinencode konvertiert, muss wissen, um welchen Typ es sich handelt, dh ob es sich um ein int oder ein float handelt. Bevor Ihr Programm eine Variable verwendet, müssen Sie es deklarieren .

Hier ist ein Beispiel.

 int Counter =0;
float BasicSalary; 

Sie werden feststellen, dass die Variable Counter auf 0 gesetzt ist. Dies ist eine optionale Initialisierung. Es ist eine sehr gute Praxis, Variablen zu initialisieren. Wenn Sie sie nicht initialisieren und dann im Code verwenden, ohne einen Anfangswert festgelegt zu haben, beginnt die Variable mit einem zufälligen Wert, der Ihren Code möglicherweise „kaputt“ macht. Der Wert ist der Wert, der sich beim Laden des Programms im Speicher befand.

02 von 08

Mehr über Ints

Was ist die größte Zahl, die ein Int speichern kann? . Nun, es hängt vom CPU- Typ ab , wird aber allgemein als 32-Bit akzeptiert. Da es fast so viele negative wie positive Werte enthalten kann, liegt der Wertebereich zwischen +/- 2 -32 bis 2 32 oder -2.147.483.648 bis +2.147.483.647.

Dies gilt für ein vorzeichenbehaftetes int, es gibt jedoch auch ein vorzeichenloses int, das Null oder positiv enthält. Es hat einen Bereich von 0 bis 4.294.967.295. Denken Sie daran – vorzeichenlose Ints benötigen kein Vorzeichen (wie + oder -1) vor ihnen, da sie immer positiv oder 0 sind.

Kurze Ints

Es gibt einen kürzeren int-Typ, der zufällig als kurzes int bezeichnet wird und 16 Bits (2 Bytes) verwendet. Dies enthält Zahlen im Bereich von -32768 bis +32767. Wenn Sie eine große Anzahl von Ints verwenden, können Sie möglicherweise Speicher sparen, indem Sie kurze Ints verwenden. Es wird nicht schneller sein, obwohl es halb so groß ist. 32-Bit-CPUs rufen Werte in Blöcken von jeweils 4 Byte aus dem Speicher ab. Dh 32 Bit (daher der Name – 32 Bit CPU!). Das Abrufen von 16 Bit erfordert also immer noch einen 32-Bit-Abruf.

In C gibt es ein längeres 64-Bit namens long long . Einige C ++ – Compiler, die diesen Typ nicht unterstützen, verwenden direkt einen alternativen Namen, z. B. verwenden sowohl Borland als auch Microsoft _int64 . Dies hat einen Bereich von -9223372036854775807 bis 9223372036854775807 (signiert) und 0 bis 18446744073709551615 (nicht signiert).

Wie bei Ints gibt es einen vorzeichenlosen Short-Int- Typ mit einem Bereich von 0..65535.

Hinweis : Einige Computersprachen bezeichnen 16 Bit als Wort.

03 von 08

Präzisionsarithmetik

Doppelter Ärger

Es gibt keinen langen Schwimmer, aber es gibt einen Doppeltyp. der doppelt so groß ist wie der Schwimmer.

  • Float : Belegt 4 Bytes. Bereich 17×10 -38 bis 1,7×10 38
  • Double : Belegt 8 Bytes. Bereich 3,4 x 10 -308 bis 3,4 308

Wenn Sie keine wissenschaftliche Programmierung mit sehr großen oder kleinen Zahlen durchführen, verwenden Sie nur Doppel für eine höhere Präzision. Floats sind gut für 6 Stellen Genauigkeit, aber Doppel bieten 15.

Präzision

Betrachten Sie die Nummer 567.8976523. Es ist ein gültiger Gleitkommawert. Wenn wir es jedoch mit diesem Code ausdrucken, können Sie feststellen, dass es an Präzision mangelt. Die Zahl hat 10 Ziffern, wird jedoch in einer Gleitkommavariablen mit nur sechs Ziffern Genauigkeit gespeichert.

 #include 
using namespace std;
int main(int argc, char* argv[])
{
float value=567.8976523;
cout.precision(8) ;
cout << value << endl;
return 0;
}

Weitere Informationen zur Funktionsweise von Cout und zur Verwendung der Präzision finden Sie unter Informationen zu Eingabe und Ausgabe. In diesem Beispiel wird die Ausgabegenauigkeit auf 8 Stellen festgelegt. Leider können Floats nur 6 enthalten, und einige Compiler geben eine Warnung zum Konvertieren eines Double in einen Float aus. Beim Ausführen wird 567.89764 ausgedruckt

Wenn Sie die Genauigkeit auf 15 ändern, wird sie als 567.897644042969 gedruckt. Ein ziemlicher Unterschied! Bewegen Sie nun den Dezimalpunkt zwei nach links, sodass der Wert 5.678976523 ist, und führen Sie das Programm erneut aus. Diesmal wird 5.67897653579712 ausgegeben. Dies ist genauer, aber immer noch anders.

Wenn Sie den Wertetyp in double und die Genauigkeit in 10 ändern, wird der Wert genau wie definiert gedruckt. Floats sind in der Regel praktisch für kleine, nicht ganzzahlige Zahlen. Bei mehr als 6 Ziffern müssen Sie jedoch doppelte Zahlen verwenden.

04 von 08

Erfahren Sie mehr über arithmetische Operationen

Das Schreiben von Computersoftware wäre nicht sehr nützlich, wenn Sie keine Addition, Subtraktion usw. durchführen könnten. Hier ist Beispiel 2.

 // ex2numbers.cpp
//
#include 
using namespace std;
int main()
{
int a=9;
int b= 12;
int total=a+b;
cout << "The total is " << total << endl;
return 0;
}

Erklärung von Beispiel 2

Drei int- Variablen werden deklariert. A und B werden Werte zugewiesen, dann wird total die Summe von A und B zugewiesen.

Bevor Sie dieses Beispiel ausführen

Hier ist ein kleiner Tipp, um Zeit beim Ausführen von Befehlszeilenanwendungen zu sparen.

Wenn Sie dieses Programm über die Befehlszeile ausführen, sollte es "Die Nummer ist 22" ausgeben .

Andere arithmetische Operationen

Zusätzlich zur Addition können Sie Subtraktion, Multiplikation und Division durchführen. Verwenden Sie einfach + für die Addition, - für die Subtraktion, * für die Multiplikation und / oder für die Division.

Versuchen Sie, das obige Programm zu ändern - verwenden Sie Subtraktion oder Multiplikation. Sie können Ints auch in Floats oder Doubles ändern .

Mit Floats haben Sie keine Kontrolle darüber, wie viele Dezimalstellen angezeigt werden, es sei denn, Sie stellen die Genauigkeit wie oben gezeigt ein.

05 von 08

Angeben von Ausgabeformaten mit cout

Wenn Sie Zahlen ausgeben, müssen Sie über diese Attribute der Zahlen nachdenken.

  • Breite - Wie viel Platz für die gesamte Nummer benötigt wird
  • Ausrichtung - linke oder rechte Zahlen sind in der Regel rechts ausgerichtet
  • Anzahl der Dezimalstellen
  • Vorzeichen oder Klammern für negative Zahlen.
  • Tausende Separatoren. Große Zahlen sehen ohne diese hässlich aus.

Jetzt können Breite, Ausrichtung, Anzahl der Dezimalstellen und Vorzeichen vom cout- Objekt festgelegt werden, und iomanip enthält Dateifunktionen .

Tausende Separatoren sind etwas komplizierter. Sie werden vom Gebietsschema eines PCs aus festgelegt. Ein Gebietsschema enthält für Ihr Land relevante Informationen wie Währungssymbole und Dezimalstellen sowie Tausendertrennzeichen. In Großbritannien und den USA verwendet die Zahl 100,98 einen Dezimalpunkt. Als Dezimalpunkt, während es in einigen europäischen Ländern ein Komma ist, bedeutet 5,70 € einen Preis von 5 Euro und 70 Cent.

 int main()
{
double a=925678.8750;
cout.setf(ios_base::showpoint|ios_base::right) ;
cout.fill('=') ;
cout.width(20) ;
locale loc("") ;
cout.imbue( loc ) ;
cout.precision(12) ;
cout << "The value is " << a << endl;
//cout.unsetf(ios_base::showpoint) ;
cout << left << "The value is " << a << endl;
for (int i=5;i< 12;i++) {
cout.precision(i) ;
cout << setprecision(i)<< "A= " << a << endl;
}
const moneypunct  &mpunct=use_facet  >(loc) ;
cout << loc.name( )<< mpunct.thousands_sep( ) << endl;
return 0;
}

Die Ausgabe davon ist

 =======The value is 925,678.875000
The value is 925,678.875000
A= 9.2568e+005
A= 925,679.
A= 925,678.9
A= 925,678.88
A= 925,678.875
A= 925,678.8750
A= 925,678.87500
English_United Kingdom.1252,

06 von 08

Über Gebietsschema und Moneypunct

Das Beispiel verwendete , um ein locale Objekt aus dem PC in der Leitung

 locale loc("") ; 

Die Linie

 const moneypunct  &mpunct=use_facet  >(loc) ;

Erstellt ein Objekt mpunct, das auf eine moneypunct- Vorlagenklasse verweist . Hier finden Sie Informationen zum angegebenen Gebietsschema. In unserem Fall gibt die Methode tausend_sep () das für das Tausendertrennzeichen verwendete Zeichen zurück.

Ohne die Leitung

 cout.imbue( loc ) ; 

Es würde keine Tausendertrenner geben. Versuchen Sie es auskommentieren und das Programm erneut ausführen.

Hinweis Es scheint Diskrepanzen zwischen verschiedenen Compilern hinsichtlich des Verhaltens von cout.imbue zu geben . Unter Visual C ++ 2005 Express Edition umfasste dies Trennzeichen. Aber der gleiche Code mit Microsoft Visual C ++ 6.0 hat nicht!

Dezimalpunkte

Im Beispiel auf der vorherigen Seite wurde showpoint verwendet , um nach den Dezimalstellen nachgestellte Nullen anzuzeigen. Es gibt Zahlen im sogenannten Standardmodus aus. Andere Modi umfassen

  • Fester Modus - Zahlen wie 567.8 anzeigen
  • Wissenschaftlicher Modus - Zeigen Sie Zahlen wie 1.23450e + 009 an

Wenn Sie eine dieser beiden Formatierung Modi durch die Verwendung cout.setf dann Präzision () legt die Anzahl der Dezimalstellen hinter dem Komma (nicht die Gesamtzahl der Stellen) , aber sie verlieren die Tausende Formatierung. Auch nachfolgende Nullen (wie durch aktiviert wurden ios_base :: showpoint ) become automatisch aktiviert , ohne dass showpoint .

07 von 08

Dinge, auf die Sie mit Ints, Floats und Bools achten sollten

Schauen Sie sich diese Aussage an.

 float f=122/11; 

Sie würden so etwas wie einen Wert von 11.0909090909 erwarten. Tatsächlich ist der Wert 11. Warum ist das so? weil der Ausdruck auf der rechten Seite (als r-Wert bezeichnet. eine Ganzzahl / Ganzzahl ist. Es wird also eine ganzzahlige Arithmetik verwendet, die den Bruchteil wegwirft und f 11 zuweist. Ändern in

 float f=122.0/11 

wird es korrigieren. Es ist eine sehr einfache Sache.

Typen Bool und Int

In C gibt es keinen Typ wie einen Bool. Ausdrücke in C basierten darauf, dass eine Null falsch oder eine Nicht-Null wahr ist. In C ++ kann der Typ bool die Werte true oder false annehmen . Diese Werte sind immer noch gleich 0 und 1. Irgendwo im Compiler wird es eine geben

 const int false=0;
const int true= 1;

Oder zumindest verhält es sich so! Die beiden folgenden Zeilen sind ohne Casting gültig, sodass Bools hinter den Kulissen implizit in Ints konvertiert werden und sogar inkrementiert oder dekrementiert werden können, obwohl dies eine sehr schlechte Praxis ist.

 bool fred=0;
int v=true;

Schauen Sie sich diesen Code an

 bool bad=true;
bad++
if (bad) ...

Das if wird immer noch das if ausführen, da die fehlerhafte Variable nicht Null ist, aber es ist ein fehlerhafter Code und sollte vermieden werden. Es empfiehlt sich, sie bestimmungsgemäß zu verwenden. if (! v) ist gültiges C ++, aber ich bevorzuge das explizitere if (v!=0) . Das aber ist eine Frage des Geschmacks, nicht eine must-do - Richtlinie.

08 von 08

Verwenden Sie Enums für besseren Code

Lesen Sie diesen Artikel zuerst, um mehr über Aufzählungen zu erfahren.

Ein Aufzählungstyp bietet eine Möglichkeit, eine Variable auf einen festen Wertesatz zu beschränken.

 enum rainbowcolor {red,orange,green, yellow, blue,indigo,violet};

 enum rainbowcolor {red=1000,orange=1005,green=1009, yellow=1010, blue,indigo,violet};

gelb=1010

Sie können einem int wie in einen Aufzählungswert zuweisen

 int p=red;

 rainbowcolor g=1000; // Error!

 rainbowcolor g=red;

Typensicherheit Es ist besser, wenn der Compiler zur Kompilierungszeit Fehler abfängt als der Benutzer zur Laufzeit

Obwohl die beiden Aussagen konzeptionell gleich sind. In der Tat werden Sie normalerweise feststellen, dass diese beiden scheinbar identischen Linien

 int p =1000;
rainbowcolor r=red;

Damit ist dieses Tutorial abgeschlossen. Das nächste Tutorial befasst sich mit Ausdrücken und Aussagen.

Similar Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.