"Long long unsigned integer type. Contains at least the [0, +18,446,744,073,709,551,615] range.[3] Specified since the C99 version of the standard."
"The relation requirements are that the long long is not smaller than long, which is not smaller than int, which is not smaller than short."
Die tatsächliche Implementierung ist machine dependent. Du kannst mit dem sizeof Operator die Größe in Byte (vom Typ size_t) Dir ausgeben lassen - bei mir ist ein long bereits 8 Byte. Um Portabilität zu gewährleisten, verwendet man deshalb gerne die expliziten typedefs vom bereits bekannten Link: en.cppreference.com/w/cpp/types/integer
Ja, die größte Fib-Zahl erreichst Du mit der unsigned Variante aber vermutlich gibt es keinen Unterschied zwischen long und long long.
viertel
Senior Dabei seit: 04.03.2003 Mitteilungen: 27783
Herkunft: Hessen
Beitrag No.3, eingetragen 2021-02-26
2021-02-26 17:34 - JamesNguyen im Themenstart schreibt:
wenn ich hier statt long überall unsigned long long schreiben würde, könnte ich dann größere fib zahlen abfragen?
reik
Aktiv Dabei seit: 06.01.2010 Mitteilungen: 152
Herkunft: Berlin
Beitrag No.8, eingetragen 2021-02-26
C
#include <stdio.h>int main(void){unsignedlong a, b, tmp;
a =0, b =1;for(int i =1; i <100; i++){printf("%i: %lu\n", i, b);
tmp = a + b;
a = b;
b = tmp;}return0;}
pzktupel
Aktiv Dabei seit: 02.09.2017 Mitteilungen: 1853
Herkunft: Thüringen
Beitrag No.9, eingetragen 2021-02-26
Bei 2^64-1 ist schluß. Will man größere Zahlen gewinnen, muss man diese allgemein zerteilen und wieder neu zusammenbauen. Das macht man meist mit Stringtypen.
Will man zum Bsp. 18991 + 23665 berechnen und hätte nur bis 2000 einen Zahlenraum, dann kann man dies tun.
18 991
+23 665
_______
656 mit Ü=1, wegen 991+665=1 656
42=1+18+23
Ergebnis: 42656
Das kann man fortsetzen, bis der Hauptspeicher am Ende ist...