Einzelnen Beitrag anzeigen
Ungelesen 06.01.10, 01:46   #45
Banghard
Newbie
 
Registriert seit: Jun 2009
Beiträge: 74
Bedankt: 26
Banghard ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
Zitat von urga Beitrag anzeigen
2^32 == 4294967296
das ist eine 10-stellige zahl...

falls du ein 64-bit system hast:
2^64 == 8589934592 immer noch 10-stellig.
mehr gibt dein prozessor jedenfalls für native typen (int, long, long long) einfach nicht her.
wenn du mehr stellen willst musst du das emulieren. siehe n! thread.
Erstens ist das komplett falsch gerechnet. 2^64 ist nicht das Doppelte von 2^32

Das richtige Ergebnis ist natürlich 18446744073709551616.

Ich glaube du bringst da sowieso ein paar Sachen durcheinander. Du berechnest über die Busbreite vom Adressbus die Anzahl der möglichen Byte, die adressiert werden können. Bei einem 32 Bit System sind das folglich 2^32 mögliche Kombinationen, du kannst also über 4 Milliarden Bytes = 4 Gigabyte damit adressieren. Bei einem 64 Bit System sind es also 2^64 mögliche Bytes, die dir ermöglichen rein theoretisch über 16000 Terabytes an Speicher zu adressieren. Das sind über 16 Milliarden Gigabytes.

Deine Rechnungen haben grundsätzlich erstmal nichts mit der Größe von Datentypen zu tun. Ein Char ist 8 Bit groß, belegt also eine Speicheradresse. Ein normales Int ist 32bit groß, belegt also schonmal vier Adressen. Und ein Long ist 64bit = 8 Adressen = 8 Bytes groß und ermöglicht dir wie schon beschrieben bis zu 18446744073709551616 zu rechnen.

@Dennka

Selbstverständlich kannst du mit einem unsigned long mit deinen 16stelligen Zahlen rumrechnen.
Banghard ist offline   Mit Zitat antworten