Programmierbegrife

Hallo,

wer kann mir diese Begriffe kurz und sachlich (evtl.mit Bsp)
erklären? Oder wo kann ich im Internet nachschauen ?
Danke im voraus.
Pet

double:
string:
Zeichensatz:
Fließkommazahlen:
Gleitkommazahlen:
Floatzahl:
float:
integer:
Binärsystem:

Ich glaube Fliesskommazahl = Gleitkommazahl, wo sich die Kommaposition aendern kann. Visual Basic hat z.B. darueber hinaus den Datentyp currency mit feststehendem komma, was somit schnellere Operationen zulaesst als mit gleitendem Komma.

In einem Binaersystem besteht die Zahlenbasis in der Regel aus 0 und 1. So rechnen Computer physikalisch. Es gibt aber auch das Dezimalsystem :smile: 0,1,2,3,4,5,6,7,8,9 oder das oktalsystem bis zur Ziffer 8. Wenn man einem Rechner -mal ganz primitiv gesehen- die Zahl 16 uebergibt, dann versteht er es auch als Zahl 16 (dezimal). Gibt man ihm aber 016, dann interpretiert er es oktal als Zahl 14 (dezimal). Im hexadezimalen System ist es aehnlich: 0,1,…,9,A,B,C,D,E,F. Das ist die Zahlenbasis 16 eben. Aber es gibt auch ganz exotischen Systeme. Als Basis waehlt man da meist eine Zahl, die einer primzahl entsprechen sollte. Das zieht bestimmte mathematische Raffinessen mit sich, aber das geht hier zu weit…

Unter einem String stellt man sich in der Regel eine Zeichenkette vor. Aber es ist mehr als eine Zeichenkette. Eine gewoehnliche Zeichkette ist ein 1-dim Array bestehend aus zeichen (Buchstaben, Ziffern, Sonderzeichen, usw.) Im Gegensatz zu einer Zeichenkette kann ein Computer bei einem String das Ende erkennen. Denn ein String wird meist mit der Escape-Sequenz \0 abgeschlossen. All die weil ist also ein String nix anderes als ein char-Array (Zeichenfeld) was aber immer genau um eins groesser ist als eine Zeichenkette. Wenn ich in C char[8] definiere, dann definiere ich ein char-Array, ABER KEINEN String.

Zeichensaetze wurde urspruenglich vom ECMA (European Computer Manufacturer’s Association) entwickelt. Neuerdings auch bekannt geworden durch die ECMAScript-Technologie. Bekannt ist die ISO-8859 Reihe.

Alle Zeichensätze dieser Familie basieren auf der 1-Byte Abbildung eines Zeichens. Das heißt, alle Zeichensätze enthalten 256 mögliche Zeichen. Bei allen Zeichensätzen sind die ersten 128 Zeichen, also die Zeichen mit den Werten 0 bis 127, identisch mit dem ASCII-Zeichensatz. Das hat den Vorteil, daß die üblichen lateinischen Groß- und Kleinbuchstaben, die arabischen Ziffern und die üblichen Sonderzeichen wie Satzzeichen oder kaufmännische Zeichen in all diesen Zeichensätzen immer zur Verfügung stehen.

So wie im ASCII-Zeichensatz die ersten 32 Zeichen (Zeichenwerte 0 bis 31) für Steuerzeichen reserviert sind, sparen auch die
erweiterten Zeichensätze der iso-Familie einen Bereich von Zeichen aus. Es handelt sich um die ersten 32 Zeichen oberhalb des
ASCII-Bereichs, also um die Zeichenwerte 128 bis 159. Die Tabellen zu den einzelnen Zeichensätzen weiter unten bilden daher die
verbleibenden Zweichenwerte 160 bis 255 ab. Das Zeichen mit dem Wert 160 ist in all diesen Zeichensätzen ein erzwungenes
Leerzeichen.

Viele der Zeichensätze der iso-8859-Familie überlappen sich. Das ist Absicht. Die Zeichensätze sind so optimiert, daß sich mit je
einem Zeichensatz möglichst viele Schriften möglichst vollständig abdecken lassen. Zeichen, die in mehreren Zeichensätzen der iso-8859-Familie vorkommen, haben in der Regel immer den gleichen Wert, d.h. sie befinden sich in den unterschiedlichen Zeichensätzen an der gleichen Stelle.

Sechs der iso-8859-Zeichensätze beziehen sich auf Schriften, die im Kern auf der lateinischen Schrift basieren. Diese Zeichensätze
haben daher noch die Beinamen Latin-1 bis Latin-6.

Letztlich stellt das alles den SBCS (Single Byte Character Set) dar. Von Microsaft gibt es auch den MBCS (Multi Byte …), der aber recht kompliziert ist, denn das erste alleine, oder auch das zweite Byte dazu kann ein zeichen im chinesischen, arabischen oder so weiter darstellen. Homogener ist das UTF-8 Unicode, wo immer zwei Bytes zusammen ein Zeichen interpretieren. Es lassen sich also 2^16 Zeichen darstellen, was fuer alle Schriftarten und Sonderzeichen dieser Welt wohl oder uebel erstmal ausreichen wird.

WinNT basiert voll und ganz auf Unicode. Win95 Reihe kann nur ASCII. Wenn Du also auf Basis von Win95/98 internationale Software entwickeln willst, dann bekommst Du grosse Probleme, wenn Du sie lokalisieren willst.

Es gibt die Ganzzahligen Datentypen short, int, long mit und ohne Vorzeichen:

signed short int signed short short int short
signed int signed int
signed long int signed long long int long

unsigned short int unsigned short
unsigned int unsigned
unsigned long int unsigned long

Obiges ist immer aquivalent gleich…
Uebrigenz gibt es auch -man mag es kaum glauben-

signed char char
unsigned char char

Ist aber ne ComplilerFrage.

char hat 1 Byte Groesse, also von 0 bis 256 (siehe Zeichensatz)

short hat in der Regel 2 Bytes und stellt die Ganzzahlen unsigned von 0 bis 65535 dar, signed von -32767 bis +32767 dar.

Integer (int) gibt es in einer 2Byte-Variante und in der 4Byte Variante, dass ist dann der long-Datentyp. Programmierer verwenden in der Regel kaum int sondern meisten long, da auf 32Bit System es keine Rolle spielt, auf 16Bit Systemen ist es System/Compiler-abhaengig.

Nun waeren wir wieder beiden den Gleitkommatypen.

float mit einer Groesse von 4 Bytes=32Bits. 24 Bit belegen die Mantisse, 7 bit den Exponenten plus 1 Bit als Vorzeichenbit.

double hat 8 Bytes mit einer Mantisse von 53 Bit und 10 Bit Exponent. Wertebereich kann von 1.7 * 10^-308 bis 1.7 * 10^308 reichen, muss aber nicht (Immer Systemabhaengig).

Dann gibt es noch long double mit 10 oder 12 Bytes.Das kann sogar Zablen der Groessenordnung 10^4932 darstellen.

Was die Datentypen je nach System leisten koennen, schaut man am besten in limits.h, float.h im include-Verzeichnis bei C++ nach.

char, int, float, double, usw. nennt man auch die basic data types.

signed, unsigned, short, long auch die specifies.

Ausserdem gibt es auch noch die modifiers const sowie volatile.

Moin,

Visual Basic hat z.B. darueber hinaus den Datentyp currency
mit feststehendem komma, was somit schnellere Operationen
zulaesst als mit gleitendem Komma.

Schneller wird es dadurch nicht, im Gegenteil. Das macht es einfach bequemer für den Entwickler.

Thorsten

Moin,

Fließkommazahlen:
Gleitkommazahlen:

Eine nicht-ganze Zahl, so wie sie im Computer dargestellt wird.

float:

Eine spezieller Datentyp, mit dem Fließkommazahlen dargestellt werden.

double:

Wie float, aber mit doppelter Breite und doppelter Genauikeit.

string:

Eine Zeichenkette. Sehr häufig wird das Ende der Zeichenkette durch ein Byte mit dem Wert Null angezeigt (nicht durch das ASCII-Zeichen ‚0‘!!).

integer:

Ein Datentyp, der ganze Zahlen ( -6545, 0, 766) aufnehmen kann.

Binärsystem:

Ein Zahlensystem. Im täglichen Leben spielt eigentlich nur das Dezimalsystem (zehn Ziffern) eine Rolle, für Computer und deren Programmierung sind noch Binärsystem (zwei Ziffern), Hexadezimalsystem (16 Ziffern, 0-9, A-F) und Oktalsystem (acht Ziffern) wichtig.

Thorsten

Moin,

Wenn ich in C char[8] definiere, dann definiere ich ein
char-Array, ABER KEINEN String.

Wenn Du schon so genau unterscheidest: Ein ‚String‘ in C ist ein Zeiger auf einen char; einen Typ ‚string‘ gibt es nicht.

Thorsten

Moin,

oktalsystem bis zur Ziffer 8

7

Thorsten

Hi,

Visual Basic hat z.B. darueber hinaus den Datentyp currency
mit feststehendem komma, was somit schnellere Operationen
zulaesst als mit gleitendem Komma.

Schneller wird es dadurch nicht, im Gegenteil. Das macht es
einfach bequemer für den Entwickler.

der Typ „Currency“ ist intern ein Ganzzahltyp (64 Bit signed), kein Fließkommatyp.

Gruß
Martin

Mein Versuch :wink:
Hi.

Binärsystem:

Die Zahlen, mit denen du tagtäglich rechnest, sind im Dezimalsystem (oder anders: zur Basis 10).

Die Zahl 123 wäre anders dargestellt 3*100 + 2*101 + 1*102

Das Deszimalsystem benutzt die Zahlen 0 bis 9.

Analog dazu das Binärsystem:

Das Binärsystem benutzt die Zahlen 0 und 1.
Eine Aufstellung der ersten 16 Zahlen im Vergleich zum Dezimalsystem und eine Methode zur Umrechnung findest du unter:

http://www.mycgiserver.com/~jaro/article.jsp?id=-922…

Der Computer führt intern alle Zahlenrepräsentationen und Rechnungen im Binären System durch.

Eine Stelle des Binärsystems heißt „bit“, sie kann 0 oder 1 annehmen.

8bits zusammen ergeben ein Byte. Ein Byte kann alle Zahlen von 0…255 repräsentieren.

2 bytes zusammen sind ein Word und 2 Words sind ein Doubleword.

uswusw.

Gebräuchlicherweise werden die meisten Größenangaben in der Computerbranche in KiloByte (kB), MegaByte (MB), GigaByte (GB) und zur Zeit schon in TeraByte (TB) gemacht.

Zeichensatz:

Ein Zeichensatz ist eine zusammengestellte Liste aus Buchstaben und Sonderzeichen. Diese Liste definiert das Alphabet des Computers. Jedes Element der Menge ist einer Zahl zugeordnet.

Als Beispiel der ASCII-Zeichensatz. Dort wird der Buchstabe A der Zahl 64 zugeordnet.

Nur aus diesen Elementen können Wörter am Computer zusammengestellt werden.

Jeder Buchstabe wird intern durch eine Reihe von Bits dargestellt. Wenn dein Zeichensatz aus z.B. 256 Elementen besteht, wird jedes Element der Liste intern durch ein Byte = 8 bits dargestellt.

string:

Ein String ist eine Liste von Buchstaben aus dem Zeichensatz.
geg.: Zeichensatz = (J,O,H,A,N,E,S,I,T,F)

Aus diesem Zeichensatz kann ich den String „JOHANNES“ oder „OHITSAFEH“ zusammenstellen oder jede andere Kombination aus den Elementen des Zeichensatzes.

Fließkommazahlen:
Gleitkommazahlen:

Sind meiner Erinnerung nach das gleiche. Der Begriff kommt aus der Computerwelt. Schon früh mußte ein Standart zur Darstellung von Kommazahlen definiert werden, und da gab es zwei:

Die Festkommadarstellung: Einfach eine Darstellung von Kommazahlen (Im Binärsystem), die nach einer bestimmten Anzahl von Nachkommastellen abschneidet.

Beispiel: 1001.101

Das bringt aber gewaltige Nachteile in der Genauigkeit mit sich (Rundungsfehler)

Beispiel: 1.5 + 1.25 = 1.8, wenn man nur eine Nachkommastelle zuläßt und rundet.

Also: Fließkommazahlen. Das gebräuchliche Format ist IEEE (IEEE 754 bzw. IEEE 1987). Dieses ist 32bit bzw. 64bit lang. Alles über das rechnen mit Kommazahlen mit Computern (inkl. IEEE) findest du unter

http://docs.sun.com/htmlcoll/coll.648.2/iso-8859-1/N…

IEEE-Zahlen haben eine flexible Anzahl von Nachkommastellen, aber sind nicht unbegrenzt genau (Wegen der begrenzten Anzahl von bits, die zur Darstellung zur Verfügung stehen)

double:

Eine IEEE-Zahl mit 64bit.

Floatzahl:
float:

Eine IEEE-Zahl mit 32bit.

integer:

eine feste Zahl ohne Nachkommastellen. Normalerweise wird sie intern durch ein doubleWord dargestellt und kann daher die Zahlen -32767 bis +32768 darstellen.

mfG,

J.P.Jarolim

Hallo,

natuerlich hast Du recht. Currency ist 64 bit (8 Byte) in einem integer Format. Aber er ist skaliert nach 10,000 mit 15 digits Festkommanummer links vom Dezimalpunkt und 4 digits links davon. Letzendlich koennte man alles als Ganzzahlen auf Bitebene interpretieren, aber auf die Interpretation kommt es drauf an.

Currency hat nach dieser Interpretation halt immer 4 Nachkommastellen, naemlich von -922.337.203.685.477,5808 bis +922.337.203.685.477,5807

Ich koennte z.B. einen Integer (4 Byte) in einen float (4 Byte) casten, ohne einen Bit-overflow zu befuerchten, aber die Bit-Anteile werden natuerlich anders interpretiert und deshalb aendert sich hoechstwahrscheinlich der eigentliche Wert.

Uebrigens mal so nebenbei: Vor geraumer Zeit war in Russland nicht das Y2k-Problem das zentrale Anliegen, sondern der fehlende Datentyp um auch Ihre hohen Schulden als Zahl in der EDV in einem geeigneten Datentyp zu speichern.

BYE

Sorry, Tipfehler meinerseits…

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

ok recht hast Du!

Was ich nur zum Ausdruck bringen wollte, was mir aber wohl nicht richtig gelungen ist, war folgendes:
Wenn ich char c[3] definiere, dann ist selbstverstaendlich:

Pointer p = c = &c[0] ein Pointer auch die Anfangsadresse dieses Arrays, was meinetwegen die chars ‚A‘,‚B‘,‚C‘ enthaelt. Aber ich koennte genausogut auf c[4] zugreifen. Allerdings schiesse ich ueber das Array hinaus.

Wenn ich aber char c[4] = {‚A‘,‚B‘,‚C‘,’\0’} definiere, dann habe ich ein char-Array, was den String „ABC“ enthaelt. DAS IST EIN UNTERSCHIED! Geschweige von sowas wie
char c[4] = {‚A‘,’\0’,‚C‘,’\0’}

Dies auch im Unterschied zu char c[] = „ABC“ was ein char-Array nicht der Laenge 3 entspricht, sondern der Laenge 4! Weil das Abschlusszeichen noch drin ist.
Wenn ich aber char *c = „ABC“ definiere, dann habe ich einen Pointer auf das Array, dess Adresse im Speicher Wo anders liegt, als bei char c[] = „ABC“. Es wird dann nochmal zusaetzlich 4 Byte initialisiert!!!

Tschuess

In C gibt es keinen Type „String“ aber in C++ nach STL, wenn ich
#include einbinde. Dann darf ich schon
vector v; definieren, um mit einem String-Array zu arbeiten.

CIAO

Moin,

Dann darf ich schon vector v; definieren, um mit
einem String-Array zu arbeiten.

Ein String-Vektor wäre jetzt wieder etwas anderes.

Thorsten

Moin,

Wenn ich aber char *c = „ABC“ definiere, dann habe ich einen
Pointer auf das Array, dess Adresse im Speicher Wo anders
liegt, als bei char c[] = „ABC“. Es wird dann nochmal
zusaetzlich 4 Byte initialisiert!!!

Wieso 4 Byte zusätzlich?

Thorsten

Hallo nochmal,

also ich bin kein Profi, aber ich sehe das so:

Wenn ich char a[] = „String“;

definiert, dann habe ich ein Array mit Namen a, was die Speicherstellen von meinetwegen 2600, 2601,…,2606 belegt (incl. dem Abschlusszeichen \0). Das sind also 7 Bytes wenn ich mich nicht irre. Damit habe ich ein Array initialisiert.

Wenn ich aber definiere:

char *a = „String“;

dann definiere ich ein Array (sozusagen Namenlos) UND einen Zeiger (mit Namen a) auf das Array. Das Array belegt z.B. die Abressen 80,81,…,86 (dezimal mal incl \0). Der Pointer a belegt dann aber eine andere Speicherstelle, meinetwegen die Adresse 2600. In einem 32bit System ist der Speicherplatz eben fuer Pointer 4 Byte gross. In dieser Speicherstelle an der Adresse 2600 mit Namen a ist ein Wert enthalten. Und zwar der Wert 80, der als Adressverweis auf das namenlose Array zeigt, dass an der Speicherstelle 80 begint und den String „'String\0“ enthaelt. Die Speicherallokierung weisst dann einen um 4 Byte hoeheren Wert auf.

BYE

Moin,

Wenn ich aber definiere:

char *a = „String“;

dann definiere ich ein Array (sozusagen Namenlos) UND einen
Zeiger (mit Namen a) auf das Array.

Stimmt.
Davon würde ich aber keine Designentscheidungen abhängig machen.

Thorsten