Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Abhängigkeit Typ <--> System

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
11.10.2004, 11:12 Uhr
~TerryB
Gast


Hi,

ich bin Anfänger. Mich interessiert folgendes:
Wovon ist es abhängig, dass ein signed long z.B. einem 32 Bit Integer entspricht?
Oder dass ein double z.B. einem 64 Bit floating point entspricht?

Vielen Dank schon im Voraus

TerryB
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.10.2004, 12:58 Uhr
virtual
Sexiest Bit alive
(Operator)


Von Hardware und Betriebssystem.

Im Allgemeinen wird bei einem C Compiler die Größe eines ints so gewählt, daß es möglichst "natürlich" ist. "Natürlich" bedeutet zum einen, daß die CPU eben mit der gewählten Größe adäquat schnell rechnen kann; zum anderen wie das API des OS ausgelegt ist.

zB war DOS ein 16 Bit System, daher waren dort die ints 16 Bit groß; die hardware hatte bis zum 286 ebenfalls nur 16 Bit. Später , ab dem 386 waren es dann 32 Bit, allerdings kann auch ein moderner Pentium 686 nach wie vor noch effizient 16 Bit code ausführen (entsprechende Flags im Segment vorausgesetzt)

Die Größen für andere integer Typen leiten sich von der Größe des Ints ab:

C++:
1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long) // long long ab C99
1 <= sizeof(bool) <= sizeof(long) // C++
sizeof(signed X)==sizeof(unsigned X)==sizeof(X) // X e { char, short, int, long }


wobei man auch für char, short und long in der Regel natürliche, für die CPU/das OS leicht umsetzbare Größen wählen wird.
Beio Fließkommazahlen richtet man sich in der Regel nach dem IEEE standard, der das Format und größe der Datentypen vorschreibt.
Hier gilt gemäß ISO:

C++:
sizeof(float) <= sizeof(double) <= sizeof(long double);



Bearbeitung:
IMHO verlangt ISO aber nicht zwingend die IEEE Norm, bin ich aber im augenblick unsicher, müsste ich nachschauen)

--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 11.10.2004 um 13:02 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.10.2004, 13:16 Uhr
~TerryB
Gast


Vielen Dank für die schnelle Antwort.
Warum eine Hardware 16 oder 32 oder 64 Bit hat ist klar. Das liegt an der Registergröße des Prozessors.
Warum gibt es aber 16 und 32 Bit Betriebssysteme? Ein Betriebssystem ist doch eigentlich nur ein großes Stück Software?
Oder kann ein 32 Bit Betriebssystem nicht auf einem 16 oder 64 Bit Prozessor funktionieren?

Vielen Dank schonmal

TerryB
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.10.2004, 18:29 Uhr
Hans
Library Walker
(Operator)



Zitat:
Warum gibt es aber 16 und 32 Bit Betriebssysteme? Ein Betriebssystem ist doch eigentlich nur ein großes Stück Software?

Hi,

bin mir nicht sicher, denke aber mal, dass das was mit der Entwicklung der Hardware zu tun hat. Denn es macht keinen Sinn, ein 32-Bit-Betriebssystem für einen 16-Bit-Prozessor zu schreiben.
Ausserdem hängt zum Beispiel die Speicherverwaltung eines BS vom Prozessor, bzw. von der Grösse seines ProgramCounter-Registers (Speicher Zeiger) ab. Eine Andere Sache sind der Datentransfer über die verschiedenen Schnittstellen, wobei hier jene gemeint sind, mit denen die einzelnen Komponenten auf dem Mainboard miteinander kommunizieren. Der AGP-Port ist ein Beispiel dafür, oder die PCI-Ports. Ganz wichtig ist in diesem Zusammenhang auch der DMA-Controller, der Daten im Speicher hin und her schiebt. Diese haben auch alle eine bestimmte Registerbreite, worauf beim Programmieren des Betriebssystem (oder von Treibern) geachtet werden muss. (Daher auch die Empfehlung, beim Wechsel von Windows 3.x auf Win95, möglichst die Win95-Treiber zu nehmen, denn das waren 32-Bit-Treiber, während die für Win 3.x 16-Bit-Treiber waren. )

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: