int64_t Größe



  • Hi, folgende Fragen:
    Ich habe ein int64_t, wieviel speicher allokiert da meine Variable erstmal ganz allgemein?
    Wenn ihc jetzt eine Zahl habe, z.B. 132993784300165 , wieviel Platz würde diese Zahl theoretisch minimal benötigen (in Bytes)? Soviel ich weiß hat doch jede Zahl intern jeder Ziffer 1 Byte zugeordnet um diese darstellen zu können, oder ? Das würde heissen die Zahl benötigt minimal 15 Byte ?

    Viele Grüße



  • ein int64_t ist, wie der Name schon sagt, 64 Bit breit. Im Allgemeinen kann man davon ausgehen, dass ein Byte 8 Bit hat. Ein int64_t belegt dann also 8 Byte.



  • Dark_Alfred schrieb:

    Wenn ihc jetzt eine Zahl habe, z.B. 132993784300165 , wieviel Platz würde diese Zahl theoretisch minimal benötigen (in Bytes)?

    Rechne sie ins Binärsystem um, dann weißt du die Anzahl der Bits. Oder mach es über den Zweierlogarithmus: nBits=log2(x+1)n_{\text{Bits}} = \lceil \log_2(x+1) \rceil (nur für positive x)

    Soviel ich weiß hat doch jede Zahl intern jeder Ziffer 1 Byte zugeordnet um diese darstellen zu können, oder ?

    So ein System gibt es, das heißt BCD (binary coded decimal), aber das ist für normale Arithmetik nicht üblich.



  • Dark_Alfred schrieb:

    Soviel ich weiß hat doch jede Zahl intern jeder Ziffer 1 Byte zugeordnet um diese darstellen zu können, oder ? Das würde heissen die Zahl benötigt minimal 15 Byte ?

    Meinst du die darstellung jeder Ziffer als ASCII-Zeichen? Nein, das ist nicht üblich. Ein Computer rechnet doch nicht im Dezimal-System (kann er technisch gesehen auch nicht), sondern im Binärsystem. Dein Beispiel ist Binär dargestellt

    01111000 11110101 00000111 01000101 01000010 10000101
    

    (Big Endian)

    Braucht also 6 Bytes. Das heißt, dein int64_t reicht.

    Edit: Das geht natürlich auch einfacher. Bei etwas kleineren Zahlen kann man sich beispielsweise die nächst-größere Zweiterpotenz ansehen und daran feststellen, ob diese größer als 2 hoch...

    - 8 (1 Byte (reicht))
    - 16 (2 Bytes (reichen))
    - 64 (8 Bytes (reichen))
    

    ist.


Anmelden zum Antworten